
This patch won't compile in my env: domain_conf.c.o -c ../src/conf/domain_conf.c In file included from /usr/lib64/glib-2.0/include/glibconfig.h:9, from /usr/include/glib-2.0/glib/gtypes.h:32, from /usr/include/glib-2.0/glib/galloca.h:32, from /usr/include/glib-2.0/glib.h:30, from ../src/util/glibcompat.h:21, from ../src/internal.h:30, from ../src/conf/domain_conf.c:30: /usr/include/glib-2.0/glib/gmacros.h:745:53: error: size of array ‘_GStaticAssertCompileTimeAssertion_111’ is negative 745 | #define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/glib-2.0/glib/gmacros.h:735:47: note: in definition of macro ‘G_PASTE_ARGS’ 735 | #define G_PASTE_ARGS(identifier1,identifier2) identifier1 ## identifier2 | ^~~~~~~~~~~ /usr/include/glib-2.0/glib/gmacros.h:745:44: note: in expansion of macro ‘G_PASTE’ 745 | #define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED | ^~~~~~~ ../src/util/virenum.h:45:5: note: in expansion of macro ‘G_STATIC_ASSERT’ 45 | G_STATIC_ASSERT(G_N_ELEMENTS(name ## TypeList) == lastVal) | ^~~~~~~~~~~~~~~ ../src/conf/domain_conf.c:1104:1: note: in expansion of macro ‘VIR_ENUM_IMPL’ 1104 | VIR_ENUM_IMPL(virDomainTimerTrack, | ^~~~~~~~~~~~~ [107/1007] Compiling C object src/util/libvirt_util.a.p/virutil.c.o ninja: build stopped: subcommand failed. You're missing this chunk in domain_conf.h: $ git diff diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 0a5d151150..51b1189951 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2160,6 +2160,7 @@ typedef enum { VIR_DOMAIN_TIMER_TRACK_BOOT = 0, VIR_DOMAIN_TIMER_TRACK_GUEST, VIR_DOMAIN_TIMER_TRACK_WALL, + VIR_DOMAIN_TIMER_TRACK_REALTIME, VIR_DOMAIN_TIMER_TRACK_LAST } virDomainTimerTrackType; Also, I believe that since you're adding a new timer track attribute "realtime" you'll also need to: - change domaincommon.rng to add it as a valid timer track value - change formatdomain.rst, section 'Time keeping' - clock - timer - track, and add this new "realtime" value I would also claim that you would also need a new qemuxmlargvtest.c since you're adding a new QEMU command line option, but given that we do not have any test for the others existing timer track command lines I'd consider this new test good to have, but optional. Thanks, DHB On 1/25/21 3:23 AM, gongwei wrote:
Pass the parameter clock rt to qemu to ensure that the virtual machine is not synchronized with the host time --- src/conf/domain_conf.c | 1 + src/qemu/qemu_command.c | 3 +++ src/qemu/qemu_validate.c | 1 + 3 files changed, 5 insertions(+)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index dab4f10..c19124d 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1106,6 +1106,7 @@ VIR_ENUM_IMPL(virDomainTimerTrack, "boot", "guest", "wall", + "realtime", );
VIR_ENUM_IMPL(virDomainTimerTickpolicy, diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 1ec302d..5e09aa0 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -5947,6 +5947,9 @@ qemuBuildClockArgStr(virDomainClockDefPtr def) case VIR_DOMAIN_TIMER_TRACK_WALL: virBufferAddLit(&buf, ",clock=host"); break; + case VIR_DOMAIN_TIMER_TRACK_REALTIME: + virBufferAddLit(&buf, ",clock=rt"); + break; }
switch (def->timers[i]->tickpolicy) { diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index a060bd9..d4fe40f 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -444,6 +444,7 @@ qemuValidateDomainDefClockTimers(const virDomainDef *def, case -1: /* unspecified - use hypervisor default */ case VIR_DOMAIN_TIMER_TRACK_GUEST: case VIR_DOMAIN_TIMER_TRACK_WALL: + case VIR_DOMAIN_TIMER_TRACK_REALTIME: break; case VIR_DOMAIN_TIMER_TRACK_BOOT: virReportError(VIR_ERR_CONFIG_UNSUPPORTED,