From: gongwei Date: Tue, 2 Feb 2021 14:20:46 +0000 (-0500) Subject: conf: add realtime parameter for rtc X-Git-Tag: v7.1.0-rc1~331 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=976bdfc8e76b46ae07cd22117b03f8aaf5f815d1;p=thirdparty%2Flibvirt.git conf: add realtime parameter for rtc Pass the parameter clock rt to qemu to ensure that the virtual machine is not synchronized with the host time Signed-off-by: gongwei Signed-off-by: Michal Privoznik Reviewed-by: Michal Privoznik --- diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index a09868bed5..3a2fe7fa16 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -2059,7 +2059,7 @@ Windows, however, expects it to be in so called 'localtime'. feature for guests running the Microsoft Windows operating system. ``track`` The ``track`` attribute specifies what the timer tracks, and can be - "boot", "guest", or "wall". Only valid for ``name="rtc"`` or + "boot", "guest", or "wall", or "realtime". Only valid for ``name="rtc"`` or ``name="platform"``. ``tickpolicy`` The ``tickpolicy`` attribute determines what happens when QEMU misses a diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 7bab818bc9..239ae3f347 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -1209,6 +1209,7 @@ boot guest wall + realtime diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 97fa841bff..69b2841924 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/conf/domain_conf.h b/src/conf/domain_conf.h index f9ea31d48c..dc54f95433 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; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index f613aa0201..4ed41ed0e4 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -5950,6 +5950,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 88f4344df0..faadfbf7c8 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, diff --git a/tests/qemuxml2argvdata/clock-realtime.args b/tests/qemuxml2argvdata/clock-realtime.args new file mode 100644 index 0000000000..bdff45bec8 --- /dev/null +++ b/tests/qemuxml2argvdata/clock-realtime.args @@ -0,0 +1,30 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-i386 \ +-name QEMUGuest1 \ +-S \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off \ +-m 214 \ +-realtime mlock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\ +server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc,clock=rt \ +-no-shutdown \ +-no-acpi \ +-usb \ +-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ +-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 diff --git a/tests/qemuxml2argvdata/clock-realtime.xml b/tests/qemuxml2argvdata/clock-realtime.xml new file mode 100644 index 0000000000..3ba6b4cb54 --- /dev/null +++ b/tests/qemuxml2argvdata/clock-realtime.xml @@ -0,0 +1,38 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219100 + 219100 + 1 + + hvm + + + + + + destroy + restart + destroy + + /usr/bin/qemu-system-i386 + + + + +
+ + +
+ + +
+ + + + + +
+ + + diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index c5d82ac72e..0f4ec4533c 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1064,6 +1064,7 @@ mymain(void) DO_TEST("cpu-host-kvmclock", NONE); DO_TEST("kvmclock", QEMU_CAPS_KVM); DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM); + DO_TEST("clock-realtime", NONE); DO_TEST("cpu-eoi-disabled", NONE); DO_TEST("cpu-eoi-enabled", NONE); diff --git a/tests/qemuxml2xmloutdata/clock-realtime.xml b/tests/qemuxml2xmloutdata/clock-realtime.xml new file mode 120000 index 0000000000..dfa513e43a --- /dev/null +++ b/tests/qemuxml2xmloutdata/clock-realtime.xml @@ -0,0 +1 @@ +../qemuxml2argvdata/clock-realtime.xml \ No newline at end of file diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 50dd970789..342d70935f 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -233,6 +233,7 @@ mymain(void) DO_TEST("kvmclock", NONE); DO_TEST("clock-timer-hyperv-rtc", NONE); DO_TEST_CAPS_ARCH_LATEST("clock-timer-armvtimer", "aarch64"); + DO_TEST("clock-realtime", NONE); DO_TEST("cpu-eoi-disabled", NONE); DO_TEST("cpu-eoi-enabled", NONE);