Re: [libvirt] [PATCH v4 0/4] Add support for Direct Mode for Hyper-V Synthetic timers
Vitaly Kuznetsov writes: > Changes since v3 [Ján Tomko]: > - Drop already merged patches. > - add "tests: qemuxml2argv: switch to DO_TEST_CAPS_LATEST for Hyper-V > tests" patch (hope I got the idea correctly). > - add hyperv-stimer-direct test to qemuxml2xml/qemuxml2argv tests. > - use VIR_CPU_x86_HV_STIMER_DIRECT instead of 'hv-stimer-direct'. > > Original description: > > QEMU-4.1 will bring us Direct Mode for Hyper-V Synthetic timers support, > we need to support it in libvirt too. As this is not a new enlightenment > but rather an enhancement of an existing one ('stimer'), support it in > > > > > > form. Backwards compatibility is (hopefully) preserved. > > Vitaly Kuznetsov (4): > tests: qemuxml2argv: switch to DO_TEST_CAPS_LATEST for Hyper-V tests > conf: add support for Direct Mode for Hyper-V Synthetic timers > qemu: add support for Direct Mode for Hyper-V Synthetic timers > news: mention Direct Mode for Hyper-V Synthetic timers support > ping? -- Vitaly -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v4 1/4] tests: qemuxml2argv: switch to DO_TEST_CAPS_LATEST for Hyper-V tests
In particular, switch to using canonical 'hv-feature' syntax instead of 'hv_feature' aliases. Suggested-by: Ján Tomko ~ Signed-off-by: Vitaly Kuznetsov --- tests/qemuxml2argvdata/hyperv-off.args| 27 --- .../hyperv-off.x86_64-latest.args | 32 + tests/qemuxml2argvdata/hyperv-panic.args | 27 --- .../hyperv-panic.x86_64-latest.args | 32 + tests/qemuxml2argvdata/hyperv.args| 29 .../hyperv.x86_64-latest.args | 34 +++ tests/qemuxml2argvtest.c | 6 ++-- 7 files changed, 101 insertions(+), 86 deletions(-) delete mode 100644 tests/qemuxml2argvdata/hyperv-off.args create mode 100644 tests/qemuxml2argvdata/hyperv-off.x86_64-latest.args delete mode 100644 tests/qemuxml2argvdata/hyperv-panic.args create mode 100644 tests/qemuxml2argvdata/hyperv-panic.x86_64-latest.args delete mode 100644 tests/qemuxml2argvdata/hyperv.args create mode 100644 tests/qemuxml2argvdata/hyperv.x86_64-latest.args diff --git a/tests/qemuxml2argvdata/hyperv-off.args b/tests/qemuxml2argvdata/hyperv-off.args deleted file mode 100644 index 59a79376d1..00 --- a/tests/qemuxml2argvdata/hyperv-off.args +++ /dev/null @@ -1,27 +0,0 @@ -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-i686 \ --name QEMUGuest1 \ --S \ --machine pc,accel=tcg,usb=off,dump-guest-core=off \ --m 214 \ --realtime mlock=off \ --smp 6,sockets=6,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 \ --no-shutdown \ --usb \ --device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 diff --git a/tests/qemuxml2argvdata/hyperv-off.x86_64-latest.args b/tests/qemuxml2argvdata/hyperv-off.x86_64-latest.args new file mode 100644 index 00..52f7473e14 --- /dev/null +++ b/tests/qemuxml2argvdata/hyperv-off.x86_64-latest.args @@ -0,0 +1,32 @@ +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-i686 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off \ +-m 214 \ +-overcommit mem-lock=off \ +-smp 6,sockets=6,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/hyperv-panic.args b/tests/qemuxml2argvdata/hyperv-panic.args deleted file mode 100644 index 1ef5068aca..00 --- a/tests/qemuxml2argvdata/hyperv-panic.args +++ /dev/null @@ -1,27 +0,0 @@ -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-i686 \ --name QEMUGuest1 \ --S \ --machine pc,accel=tcg,usb=off,dump-guest-core=off \ --cpu qemu32,hv-crash \ --m 214 \ --realtime mlock=off \ --smp 6,sockets=6,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 \ --no-shutdown \ --usb diff --git a/tests/qemuxml2argvdata/hyperv-panic.x86_64-latest.args b/tests/qemuxml2argvdata/hyperv-panic.x86_64-latest.args new file mode 100644 index 00..c92df8b79f --- /dev/null +++ b/tests/qemuxml2argvdata/hyperv-panic.x86_64-latest.args @@ -0,0 +1,32 @@ +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
[libvirt] [PATCH v4 3/4] qemu: add support for Direct Mode for Hyper-V Synthetic timers
QEMU-4.1 supports 'Direct Mode' for Hyper-V synthetic timers (hv-stimer-direct CPU flag): Windows guests can request that timer expiration notifications are delivered as normal interrupts (and not VMBus messages). This is used by Hyper-V on KVM. Signed-off-by: Vitaly Kuznetsov --- src/qemu/qemu_command.c | 3 ++ src/qemu/qemu_process.c | 20 +-- .../hyperv-stimer-direct.x86_64-latest.args | 32 + .../qemuxml2argvdata/hyperv-stimer-direct.xml | 33 + tests/qemuxml2argvtest.c | 1 + .../hyperv-stimer-direct.xml | 35 +++ tests/qemuxml2xmltest.c | 1 + 7 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 tests/qemuxml2argvdata/hyperv-stimer-direct.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/hyperv-stimer-direct.xml create mode 100644 tests/qemuxml2xmloutdata/hyperv-stimer-direct.xml diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 71a36ff63a..9add21b929 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -7175,6 +7175,9 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, virBufferAsprintf(, ",%s%s", hvPrefix, virDomainHypervTypeToString(i)); +if ((i == VIR_DOMAIN_HYPERV_STIMER) && +(def->hyperv_stimer_direct == VIR_TRISTATE_SWITCH_ON)) +virBufferAsprintf(, ",%s", VIR_CPU_x86_HV_STIMER_DIRECT); break; case VIR_DOMAIN_HYPERV_SPINLOCKS: diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 1ed56457b1..7c6428ea75 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4112,10 +4112,26 @@ qemuProcessVerifyHypervFeatures(virDomainDefPtr def, rc = virCPUDataCheckFeature(cpu, cpuFeature); VIR_FREE(cpuFeature); -if (rc < 0) +if (rc < 0) { return -1; -else if (rc == 1) +} else if (rc == 1) { +if (i == VIR_DOMAIN_HYPERV_STIMER) { +if (def->hyperv_stimer_direct != VIR_TRISTATE_SWITCH_ON) +continue; + +rc = virCPUDataCheckFeature(cpu, VIR_CPU_x86_HV_STIMER_DIRECT); +if (rc < 0) +return -1; +else if (rc == 1) +continue; + +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("host doesn't support hyperv stimer '%s' feature"), + "direct"); +return -1; +} continue; +} switch ((virDomainHyperv) i) { case VIR_DOMAIN_HYPERV_RELAXED: diff --git a/tests/qemuxml2argvdata/hyperv-stimer-direct.x86_64-latest.args b/tests/qemuxml2argvdata/hyperv-stimer-direct.x86_64-latest.args new file mode 100644 index 00..34e27c75f0 --- /dev/null +++ b/tests/qemuxml2argvdata/hyperv-stimer-direct.x86_64-latest.args @@ -0,0 +1,32 @@ +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-i686 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off \ +-cpu qemu32,hv-vpindex,hv-synic,hv-stimer,hv-stimer-direct \ +-m 214 \ +-overcommit mem-lock=off \ +-smp 6,sockets=6,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/hyperv-stimer-direct.xml b/tests/qemuxml2argvdata/hyperv-stimer-direct.xml new file mode 100644 index 00..9c865f5746 --- /dev/null +++ b/tests/qemuxml2argvdata/hyperv-stimer-direct.xml @@ -0,0 +1,33 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219100 + 219100 + 6 + +hvm + + + + + + + + + + + + + + destroy + restart + destroy + +/usr/bin/qemu-system-i686 + + + + + + + diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 4c3aeffe76..235efe0b06 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -914,6 +914,7 @@ mymain(voi
[libvirt] [PATCH v4 0/4] Add support for Direct Mode for Hyper-V Synthetic timers
Changes since v3 [Ján Tomko]: - Drop already merged patches. - add "tests: qemuxml2argv: switch to DO_TEST_CAPS_LATEST for Hyper-V tests" patch (hope I got the idea correctly). - add hyperv-stimer-direct test to qemuxml2xml/qemuxml2argv tests. - use VIR_CPU_x86_HV_STIMER_DIRECT instead of 'hv-stimer-direct'. Original description: QEMU-4.1 will bring us Direct Mode for Hyper-V Synthetic timers support, we need to support it in libvirt too. As this is not a new enlightenment but rather an enhancement of an existing one ('stimer'), support it in form. Backwards compatibility is (hopefully) preserved. Vitaly Kuznetsov (4): tests: qemuxml2argv: switch to DO_TEST_CAPS_LATEST for Hyper-V tests conf: add support for Direct Mode for Hyper-V Synthetic timers qemu: add support for Direct Mode for Hyper-V Synthetic timers news: mention Direct Mode for Hyper-V Synthetic timers support docs/formatdomain.html.in | 10 +-- docs/news.xml | 9 +++ docs/schemas/domaincommon.rng | 16 - src/conf/domain_conf.c| 62 ++- src/conf/domain_conf.h| 1 + src/cpu/cpu_x86.c | 3 + src/cpu/cpu_x86_data.h| 2 + src/qemu/qemu_command.c | 3 + src/qemu/qemu_process.c | 20 +- tests/qemuxml2argvdata/hyperv-off.args| 27 .../hyperv-off.x86_64-latest.args | 32 ++ tests/qemuxml2argvdata/hyperv-panic.args | 27 .../hyperv-panic.x86_64-latest.args | 32 ++ .../hyperv-stimer-direct.x86_64-latest.args | 32 ++ .../qemuxml2argvdata/hyperv-stimer-direct.xml | 33 ++ tests/qemuxml2argvdata/hyperv.args| 29 - .../hyperv.x86_64-latest.args | 34 ++ tests/qemuxml2argvtest.c | 7 ++- .../hyperv-stimer-direct.xml | 35 +++ tests/qemuxml2xmltest.c | 1 + 20 files changed, 321 insertions(+), 94 deletions(-) delete mode 100644 tests/qemuxml2argvdata/hyperv-off.args create mode 100644 tests/qemuxml2argvdata/hyperv-off.x86_64-latest.args delete mode 100644 tests/qemuxml2argvdata/hyperv-panic.args create mode 100644 tests/qemuxml2argvdata/hyperv-panic.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/hyperv-stimer-direct.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/hyperv-stimer-direct.xml delete mode 100644 tests/qemuxml2argvdata/hyperv.args create mode 100644 tests/qemuxml2argvdata/hyperv.x86_64-latest.args create mode 100644 tests/qemuxml2xmloutdata/hyperv-stimer-direct.xml -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v4 2/4] conf: add support for Direct Mode for Hyper-V Synthetic timers
Support 'Direct Mode' for Hyper-V Synthetic Timers in domain config. Make it 'stimer' enlightenment option as it is not a separate thing. Reviewed-by: Ján Tomko Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 10 +++--- docs/schemas/domaincommon.rng | 16 - src/conf/domain_conf.c| 62 ++- src/conf/domain_conf.h| 1 + src/cpu/cpu_x86.c | 3 ++ src/cpu/cpu_x86_data.h| 2 ++ 6 files changed, 88 insertions(+), 6 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index f5c882141a..de577e5755 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -2033,7 +2033,9 @@ vpindex state='on'/ runtime state='on'/ synic state='on'/ -stimer state='on'/ +stimer state='on' + direct state='on'/ +/stimer reset state='on'/ vendor_id state='on' value='KVM Hv'/ frequencies state='on'/ @@ -2148,9 +2150,9 @@ stimer - Enable SynIC timers - on, off - 1.3.3 (QEMU 2.6) + Enable SynIC timers, optionally with Direct Mode support + on, off; direct - on,off + 1.3.3 (QEMU 2.6), direct mode 5.7.0 (QEMU 4.1) reset diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index a0771da45b..6707dcc634 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5907,7 +5907,7 @@ - + @@ -5956,6 +5956,20 @@ + + + + + + + + + + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 0456369d55..f56e850ade 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -20388,6 +20388,39 @@ virDomainDefParseXML(xmlDocPtr xml, ctxt->node = node; } +if (def->features[VIR_DOMAIN_HYPERV_STIMER] == VIR_TRISTATE_SWITCH_ON) { +int value; +if ((n = virXPathNodeSet("./features/hyperv/stimer/*", ctxt, )) < 0) +goto error; + +for (i = 0; i < n; i++) { +if (STRNEQ((const char *)nodes[i]->name, "direct")) { +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("unsupported Hyper-V stimer feature: %s"), + nodes[i]->name); +goto error; +} + +if (!(tmp = virXMLPropString(nodes[i], "state"))) { +virReportError(VIR_ERR_XML_ERROR, + _("missing 'state' attribute for " + "Hyper-V stimer '%s' feature"), "direct"); +goto error; +} + +if ((value = virTristateSwitchTypeFromString(tmp)) < 0) { +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("invalid value of state argument " + "for Hyper-V stimer '%s' feature"), "direct"); +goto error; +} + +VIR_FREE(tmp); +def->hyperv_stimer_direct = value; +} +VIR_FREE(nodes); +} + if (def->features[VIR_DOMAIN_FEATURE_KVM] == VIR_TRISTATE_SWITCH_ON) { int feature; int value; @@ -22612,6 +22645,17 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src, } } +if (src->hyperv_features[VIR_DOMAIN_HYPERV_STIMER] == VIR_TRISTATE_SWITCH_ON) { +if (src->hyperv_stimer_direct != dst->hyperv_stimer_direct) { +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("State of HyperV stimer direct feature differs: " + "source: '%s', destination: '%s'"), + virTristateSwitchTypeToString(src->hyperv_stimer_direct), + virTristateSwitchTypeToString(dst->hyperv_stimer_direct)); +return false; +} +} + /* kvm */ if (src->features[VIR_DOMAIN_FEATURE_KVM] == VIR_TRISTATE_SWITCH_ON) { for (i = 0; i < VIR_DOMAIN_KVM_LAST; i++) { @@ -28071,7 +28115,6 @@ virDomainDefFormatFeatures(virBufferPtr buf, case VIR_DOMAIN_HYPERV_VPINDEX: case VIR_DOMAIN_HYPERV_RUNTIME: case VIR_DOMAIN_HYPERV_SYNIC: -case VIR_DOMAIN_HYPERV_STIMER: case VIR_DOMAIN_HYPERV_RESET: case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: @@ -28090,6 +28133,23 @@ virDomainDefFormatFeatures(virBufferPtr buf, def->
[libvirt] [PATCH v4 4/4] news: mention Direct Mode for Hyper-V Synthetic timers support
The QEMU driver now supports Direct Mode for Hyper-V Synthetic timers for Hyper-V guests. Reviewed-by: Ján Tomko Signed-off-by: Vitaly Kuznetsov --- docs/news.xml | 9 + 1 file changed, 9 insertions(+) diff --git a/docs/news.xml b/docs/news.xml index a4d727b9c5..d63fca3b48 100644 --- a/docs/news.xml +++ b/docs/news.xml @@ -41,6 +41,15 @@ + + + qemu: Support Direct Mode for Hyper-V Synthetic timers + + + The QEMU driver now supports Direct Mode for Hyper-V Synthetic timers + for Hyper-V guests. + + -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v3 4/5] qemu: add support for Direct Mode for Hyper-V Synthetic timers
Ján Tomko writes: > Either leave this as-is and add the new feature in a separate test, > or you can branch the test based on QEMU versions like we do for other > features: > > DO_TEST_CAPS_VER("pv-spinlock-disabled", "2.7.0"); > DO_TEST_CAPS_VER("pv-spinlock-disabled", "4.0.0"); > DO_TEST_CAPS_LATEST("pv-spinlock-disabled"); I think I slightly prefer a new test: this way we can test both and (and it makes no sense to test hv-stimer-direct for old QEMU versions and 4.1 is "the latest" atm). Thank you for your review, v4 is comming soon (I promise)! -- Vitaly -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v3 4/5] qemu: add support for Direct Mode for Hyper-V Synthetic timers
Ján Tomko writes: > One more thing, qemuxml2argvtest is using DO_TEST: > DO_TEST("hyperv", NONE); > DO_TEST("hyperv-off", NONE); > DO_TEST("hyperv-panic", NONE); > which manually enumarate the used QEMU capabilities (although there are > none here) > > DO_TEST_CAPS_LATEST is the way to test against QEMU capabilites > gathered from a real binary - if you use that macro for testing, > it will have the QEMU_CAPS_CANONICAL_CPU_FEATURES capability and all the > included features will use '-' instead of '_' as the separator. > Forgive me my ignorance (and long reply times), is the idea aimed at removing "hvPrefix" machinery from qemuBuildCpuCommandLine() completely - probably in favor of hardcorded '-' delimiters? I tried switching to DO_TEST_CAPS_LATEST in qemuxml2argvtest and after renaming tests/qemuxml2argvdata/hyperv{-off,-panic}.args to tests/qemuxml2argvdata/hyperv{,-off,-panic}.x86_64-latest.args to make the test run, I'm getting the following: In '/home/vitty/workspace/Upstream/libvirt/tests/qemuxml2argvdata/hyperv.x86_64-latest.args': Offset 292 Expect [QEMUGuest1 -S -machine pc,accel=tcg,usb=off,dump-guest-core=off -cpu 'qemu32,hv-relaxed,hv-vapic,hv-spinlocks=0x2fff,hv-vpindex,hv-runtime,hv-synic,hv-stimer,hv-reset,hv-vendor-id=KVM Hv,hv-frequencies,hv-reenlightenment,hv-tlbflush,hv-ipi,hv-evmcs' -m 214 -realtime mlock=off -smp 6,sockets=6,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 -no-shutdown -usb] Actual [guest=QEMUGuest1,debug-threads=on -S -object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes -machine pc,accel=tcg,usb=off,dump-guest-core=off -cpu 'qemu32,hv-relaxed,hv-vapic,hv-spinlocks=0x2fff,hv-vpindex,hv-runtime,hv-synic,hv-stimer,hv-reset,hv-vendor-id=KVM Hv,hv-frequencies,hv-reenlightenment,hv-tlbflush,hv-ipi,hv-evmcs' -m 214 -overcommit mem-lock=off -smp 6,sockets=6,cores=1,threads=1 -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 -display none -no-user-config -nodefaults -chardev socket,id=charmonitor,fd=1729,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -boot strict=on -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny -msg timestamp=on] I can, probably, add all the missing stuff but I'm not sure it's the right way to go in the first place :-) What if we just add QEMU_CAPS_CANONICAL_CPU_FEATURES to DO_TEST: diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 71a36ff63a..f88d45f4e6 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -7152,11 +7152,6 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, } if (def->features[VIR_DOMAIN_FEATURE_HYPERV] == VIR_TRISTATE_SWITCH_ON) { -const char *hvPrefix = "hv-"; - -if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CANONICAL_CPU_FEATURES)) -hvPrefix = "hv_"; - for (i = 0; i < VIR_DOMAIN_HYPERV_LAST; i++) { switch ((virDomainHyperv) i) { case VIR_DOMAIN_HYPERV_RELAXED: @@ -7172,8 +7167,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, case VIR_DOMAIN_HYPERV_IPI: case VIR_DOMAIN_HYPERV_EVMCS: if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) -virBufferAsprintf(, ",%s%s", - hvPrefix, +virBufferAsprintf(, ",hv-%s", virDomainHypervTypeToString(i)); break; diff --git a/tests/qemuxml2argvdata/hyperv.args b/tests/qemuxml2argvdata/hyperv.args index 086adaa349..d09d8acdff 100644 --- a/tests/qemuxml2argvdata/hyperv.args +++ b/tests/qemuxml2argvdata/hyperv.args @@ -11,9 +11,9 @@ QEMU_AUDIO_DRV=none \ -name QEMUGuest1 \ -S \ -machine pc,accel=tcg,usb=off,dump-guest-core=off \ --cpu 'qemu32,hv_relaxed,hv_vapic,hv-spinlocks=0x2fff,hv_vpindex,hv_runtime,\ -hv_synic,hv_stimer,hv_reset,hv-vendor-id=KVM Hv,hv_frequencies,\ -hv_reenlightenment,hv_tlbflush,hv_ipi,hv_evmcs' \ +-cpu 'qemu32,hv-relaxed,hv-vapic,hv-spinlocks=0x2fff,hv-vpindex,hv-runtime,\ +hv-synic,hv-stimer,hv-reset,hv-vendor-id=KVM Hv,hv-frequencies,\ +hv-reenlightenment,hv-tlbflush,hv-ipi,hv-evmcs' \ -m 214 \ -realtime mlock=off \ -smp 6,sockets=6,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index c166fd18d6..d13c7c8b56 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -911,9 +911,9 @@ mymain(void) DO_TEST_CAPS_VER("kvmclock+eoi-disabled", "4.0.0"); DO_TEST_CAPS_LATEST("kvmclock+eoi-disabled"); -DO_TEST("hyperv", NONE); -DO_TEST("hyperv-off", NONE); -DO_TEST("hyperv-panic", NONE); +DO_TEST("hyperv",
[libvirt] [PATCH v3 1/5] cpu_x86: add Edx to KVM_FEATURE_DEF()
Some Hyper-V features (like the upcoming Direct Synthetic timers) are announced by feature bits in Edx but KVM_FEATURE_DEF() supports only Eax. Signed-off-by: Vitaly Kuznetsov --- src/cpu/cpu_x86.c | 30 +++--- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index b58eb2c9d8..d2d9537c32 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -59,9 +59,9 @@ struct _virCPUx86Feature { { .type = VIR_CPU_X86_DATA_CPUID, \ .data = { .cpuid = {__VA_ARGS__} } } -#define KVM_FEATURE_DEF(Name, Eax_in, Eax) \ +#define KVM_FEATURE_DEF(Name, Eax_in, Eax, Edx) \ static virCPUx86DataItem Name ## _data[] = { \ -CPUID(.eax_in = Eax_in, .eax = Eax), \ +CPUID(.eax_in = Eax_in, .eax = Eax, .edx = Edx), \ } #define KVM_FEATURE(Name) \ @@ -74,32 +74,32 @@ struct _virCPUx86Feature { } KVM_FEATURE_DEF(VIR_CPU_x86_KVM_PV_UNHALT, -0x4001, 0x0080); +0x4001, 0x0080, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_RUNTIME, -0x4003, 0x0001); +0x4003, 0x0001, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_SYNIC, -0x4003, 0x0004); +0x4003, 0x0004, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_STIMER, -0x4003, 0x0008); +0x4003, 0x0008, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_RELAXED, -0x4003, 0x0020); +0x4003, 0x0020, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_VAPIC, -0x4003, 0x0030); +0x4003, 0x0030, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_VPINDEX, -0x4003, 0x0040); +0x4003, 0x0040, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_RESET, -0x4003, 0x0080); +0x4003, 0x0080, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_FREQUENCIES, -0x4003, 0x0800); +0x4003, 0x0800, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_REENLIGHTENMENT, -0x4003, 0x2000); +0x4003, 0x2000, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_TLBFLUSH, -0x4004, 0x0004); +0x4004, 0x0004, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_IPI, -0x4004, 0x0400); +0x4004, 0x0400, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_EVMCS, -0x4004, 0x4000); +0x4004, 0x4000, 0x0); static virCPUx86Feature x86_kvm_features[] = { -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v3 0/5] Add support for Direct Mode for Hyper-V Synthetic timers
Changes since v2: - Post 5.6.0 rebase, patches 1-3 are dropped as they were already merged. Original description: QEMU-4.1 will bring us Direct Mode for Hyper-V Synthetic timers support, we need to support it in libvirt too. As this is not a new enlightenment but rather an enhancement of an existing one ('stimer'), support it in form. Backwards compatibility is (hopefully) preserved. Vitaly Kuznetsov (5): cpu_x86: add Edx to KVM_FEATURE_DEF() conf: change the way how Hyper-V features are printed out conf: add support for Direct Mode for Hyper-V Synthetic timers qemu: add support for Direct Mode for Hyper-V Synthetic timers news: mention Direct Mode for Hyper-V Synthetic timers support docs/formatdomain.html.in | 10 ++-- docs/news.xml | 9 docs/schemas/domaincommon.rng | 16 +- src/conf/domain_conf.c | 77 ++--- src/conf/domain_conf.h | 1 + src/cpu/cpu_x86.c | 33 +++-- src/cpu/cpu_x86_data.h | 2 + src/qemu/qemu_command.c | 12 +++-- src/qemu/qemu_process.c | 20 +++- tests/qemuxml2argvdata/hyperv.args | 4 +- tests/qemuxml2argvdata/hyperv.xml | 4 +- tests/qemuxml2xmloutdata/hyperv.xml | 4 +- 12 files changed, 155 insertions(+), 37 deletions(-) -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v3 4/5] qemu: add support for Direct Mode for Hyper-V Synthetic timers
QEMU-4.1 supports 'Direct Mode' for Hyper-V synthetic timers (hv-stimer-direct CPU flag): Windows guests can request that timer expiration notifications are delivered as normal interrupts (and not VMBus messages). This is used by Hyper-V on KVM. Signed-off-by: Vitaly Kuznetsov --- src/qemu/qemu_command.c | 12 src/qemu/qemu_process.c | 20 ++-- tests/qemuxml2argvdata/hyperv.args | 4 ++-- tests/qemuxml2argvdata/hyperv.xml | 4 +++- tests/qemuxml2xmloutdata/hyperv.xml | 4 +++- 5 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index c8494de785..af913dba34 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -7152,10 +7152,10 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, } if (def->features[VIR_DOMAIN_FEATURE_HYPERV] == VIR_TRISTATE_SWITCH_ON) { -const char *hvPrefix = "hv-"; +const char *hvDelimiter = "-"; if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CANONICAL_CPU_FEATURES)) -hvPrefix = "hv_"; +hvDelimiter = "_"; for (i = 0; i < VIR_DOMAIN_HYPERV_LAST; i++) { switch ((virDomainHyperv) i) { @@ -7172,9 +7172,13 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, case VIR_DOMAIN_HYPERV_IPI: case VIR_DOMAIN_HYPERV_EVMCS: if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) -virBufferAsprintf(, ",%s%s", - hvPrefix, +virBufferAsprintf(, ",hv%s%s", + hvDelimiter, virDomainHypervTypeToString(i)); +if ((i == VIR_DOMAIN_HYPERV_STIMER) && +(def->hyperv_stimer_direct == VIR_TRISTATE_SWITCH_ON)) +virBufferAsprintf(, ",hv%sstimer%sdirect", hvDelimiter, + hvDelimiter); break; case VIR_DOMAIN_HYPERV_SPINLOCKS: diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 1ed56457b1..792fa33327 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4112,10 +4112,26 @@ qemuProcessVerifyHypervFeatures(virDomainDefPtr def, rc = virCPUDataCheckFeature(cpu, cpuFeature); VIR_FREE(cpuFeature); -if (rc < 0) +if (rc < 0) { return -1; -else if (rc == 1) +} else if (rc == 1) { +if (i == VIR_DOMAIN_HYPERV_STIMER) { +if (def->hyperv_stimer_direct != VIR_TRISTATE_SWITCH_ON) +continue; + +rc = virCPUDataCheckFeature(cpu, "hv-stimer-direct"); +if (rc < 0) +return -1; +else if (rc == 1) +continue; + +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("host doesn't support hyperv stimer '%s' feature"), + "direct"); +return -1; +} continue; +} switch ((virDomainHyperv) i) { case VIR_DOMAIN_HYPERV_RELAXED: diff --git a/tests/qemuxml2argvdata/hyperv.args b/tests/qemuxml2argvdata/hyperv.args index 086adaa349..8040da9caa 100644 --- a/tests/qemuxml2argvdata/hyperv.args +++ b/tests/qemuxml2argvdata/hyperv.args @@ -12,8 +12,8 @@ QEMU_AUDIO_DRV=none \ -S \ -machine pc,accel=tcg,usb=off,dump-guest-core=off \ -cpu 'qemu32,hv_relaxed,hv_vapic,hv-spinlocks=0x2fff,hv_vpindex,hv_runtime,\ -hv_synic,hv_stimer,hv_reset,hv-vendor-id=KVM Hv,hv_frequencies,\ -hv_reenlightenment,hv_tlbflush,hv_ipi,hv_evmcs' \ +hv_synic,hv_stimer,hv_stimer_direct,hv_reset,hv-vendor-id=KVM Hv,\ +hv_frequencies,hv_reenlightenment,hv_tlbflush,hv_ipi,hv_evmcs' \ -m 214 \ -realtime mlock=off \ -smp 6,sockets=6,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/hyperv.xml b/tests/qemuxml2argvdata/hyperv.xml index c6feaed528..ae0f934f76 100644 --- a/tests/qemuxml2argvdata/hyperv.xml +++ b/tests/qemuxml2argvdata/hyperv.xml @@ -17,7 +17,9 @@ - + + + diff --git a/tests/qemuxml2xmloutdata/hyperv.xml b/tests/qemuxml2xmloutdata/hyperv.xml index 5510d3dfad..2e4b43d4c6 100644 --- a/tests/qemuxml2xmloutdata/hyperv.xml +++ b/tests/qemuxml2xmloutdata/hyperv.xml @@ -17,7 +17,9 @@ - + + + -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v3 2/5] conf: change the way how Hyper-V features are printed out
Current code doesn't allow us to add sub-features as we always print the closing '/>'. As a preparatory change to implementing 'direct' sub-feature for 'stimer' feature switch to printing closing tag individually. No functional change. Signed-off-by: Vitaly Kuznetsov --- src/conf/domain_conf.c | 15 +-- 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 5cd9939031..f75ee03e9b 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -28078,19 +28078,24 @@ virDomainDefFormatFeatures(virBufferPtr buf, case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: case VIR_DOMAIN_HYPERV_EVMCS: +virBufferAddLit(, "/>\n"); break; case VIR_DOMAIN_HYPERV_SPINLOCKS: -if (def->hyperv_features[j] != VIR_TRISTATE_SWITCH_ON) +if (def->hyperv_features[j] != VIR_TRISTATE_SWITCH_ON) { +virBufferAddLit(, "/>\n"); break; -virBufferAsprintf(, " retries='%d'", +} +virBufferAsprintf(, " retries='%d'/>\n", def->hyperv_spinlocks); break; case VIR_DOMAIN_HYPERV_VENDOR_ID: -if (def->hyperv_features[j] != VIR_TRISTATE_SWITCH_ON) +if (def->hyperv_features[j] != VIR_TRISTATE_SWITCH_ON) { +virBufferAddLit(, "/>\n"); break; -virBufferEscapeString(, " value='%s'", +} +virBufferEscapeString(, " value='%s'/>\n", def->hyperv_vendor_id); break; @@ -28098,8 +28103,6 @@ virDomainDefFormatFeatures(virBufferPtr buf, case VIR_DOMAIN_HYPERV_LAST: break; } - -virBufferAddLit(, "/>\n"); } virBufferAdjustIndent(, -2); virBufferAddLit(, "\n"); -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v3 3/5] conf: add support for Direct Mode for Hyper-V Synthetic timers
Support 'Direct Mode' for Hyper-V Synthetic Timers in domain config. Make it 'stimer' enlightenment option as it is not a separate thing. Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 10 +++--- docs/schemas/domaincommon.rng | 16 - src/conf/domain_conf.c| 62 ++- src/conf/domain_conf.h| 1 + src/cpu/cpu_x86.c | 3 ++ src/cpu/cpu_x86_data.h| 2 ++ 6 files changed, 88 insertions(+), 6 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index f5c882141a..de577e5755 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -2033,7 +2033,9 @@ vpindex state='on'/ runtime state='on'/ synic state='on'/ -stimer state='on'/ +stimer state='on' + direct state='on'/ +/stimer reset state='on'/ vendor_id state='on' value='KVM Hv'/ frequencies state='on'/ @@ -2148,9 +2150,9 @@ stimer - Enable SynIC timers - on, off - 1.3.3 (QEMU 2.6) + Enable SynIC timers, optionally with Direct Mode support + on, off; direct - on,off + 1.3.3 (QEMU 2.6), direct mode 5.7.0 (QEMU 4.1) reset diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index a0771da45b..6707dcc634 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5907,7 +5907,7 @@ - + @@ -5956,6 +5956,20 @@ + + + + + + + + + + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index f75ee03e9b..4d95be8c08 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -20388,6 +20388,39 @@ virDomainDefParseXML(xmlDocPtr xml, ctxt->node = node; } +if (def->features[VIR_DOMAIN_HYPERV_STIMER] == VIR_TRISTATE_SWITCH_ON) { +int value; +if ((n = virXPathNodeSet("./features/hyperv/stimer/*", ctxt, )) < 0) +goto error; + +for (i = 0; i < n; i++) { +if (STRNEQ((const char *)nodes[i]->name, "direct")) { +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("unsupported Hyper-V stimer feature: %s"), + nodes[i]->name); +goto error; +} + +if (!(tmp = virXMLPropString(nodes[i], "state"))) { +virReportError(VIR_ERR_XML_ERROR, + _("missing 'state' attribute for " + "Hyper-V stimer '%s' feature"), "direct"); +goto error; +} + +if ((value = virTristateSwitchTypeFromString(tmp)) < 0) { +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("invalid value of state argument " + "for Hyper-V stimer '%s' feature"), "direct"); +goto error; +} + +VIR_FREE(tmp); +def->hyperv_stimer_direct = value; +} +VIR_FREE(nodes); +} + if (def->features[VIR_DOMAIN_FEATURE_KVM] == VIR_TRISTATE_SWITCH_ON) { int feature; int value; @@ -22612,6 +22645,17 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src, } } +if (src->hyperv_features[VIR_DOMAIN_HYPERV_STIMER] == VIR_TRISTATE_SWITCH_ON) { +if (src->hyperv_stimer_direct != dst->hyperv_stimer_direct) { +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("State of HyperV stimer direct feature differs: " + "source: '%s', destination: '%s'"), + virTristateSwitchTypeToString(src->hyperv_stimer_direct), + virTristateSwitchTypeToString(dst->hyperv_stimer_direct)); +return false; +} +} + /* kvm */ if (src->features[VIR_DOMAIN_FEATURE_KVM] == VIR_TRISTATE_SWITCH_ON) { for (i = 0; i < VIR_DOMAIN_KVM_LAST; i++) { @@ -28071,7 +28115,6 @@ virDomainDefFormatFeatures(virBufferPtr buf, case VIR_DOMAIN_HYPERV_VPINDEX: case VIR_DOMAIN_HYPERV_RUNTIME: case VIR_DOMAIN_HYPERV_SYNIC: -case VIR_DOMAIN_HYPERV_STIMER: case VIR_DOMAIN_HYPERV_RESET: case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: @@ -28090,6 +28133,23 @@ virDomainDefFormatFeatures(virBufferPtr buf, def->hyperv_spinlocks); break; +
[libvirt] [PATCH v3 5/5] news: mention Direct Mode for Hyper-V Synthetic timers support
The QEMU driver now supports Direct Mode for Hyper-V Synthetic timers for Hyper-V guests. Signed-off-by: Vitaly Kuznetsov --- docs/news.xml | 9 + 1 file changed, 9 insertions(+) diff --git a/docs/news.xml b/docs/news.xml index a4d727b9c5..d63fca3b48 100644 --- a/docs/news.xml +++ b/docs/news.xml @@ -41,6 +41,15 @@ + + + qemu: Support Direct Mode for Hyper-V Synthetic timers + + + The QEMU driver now supports Direct Mode for Hyper-V Synthetic timers + for Hyper-V guests. + + -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v2 8/8] news: mention Direct Mode for Hyper-V Synthetic timers support
The QEMU driver now supports Direct Mode for Hyper-V Synthetic timers for Hyper-V guests. Signed-off-by: Vitaly Kuznetsov --- docs/news.xml | 9 + 1 file changed, 9 insertions(+) diff --git a/docs/news.xml b/docs/news.xml index 1134309ec2..e4d8f1ecac 100644 --- a/docs/news.xml +++ b/docs/news.xml @@ -54,6 +54,15 @@ + + + qemu: Support Direct Mode for Hyper-V Synthetic timers + + + The QEMU driver now supports Direct Mode for Hyper-V Synthetic timers + for Hyper-V guests. + + qemu: Introduce a new video model of type 'bochs' -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v2 6/8] conf: add support for Direct Mode for Hyper-V Synthetic timers
Support 'Direct Mode' for Hyper-V Synthetic Timers in domain config. Make it 'stimer' enlightenment option as it is not a separate thing. Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 10 +++--- docs/schemas/domaincommon.rng | 16 - src/conf/domain_conf.c| 62 ++- src/conf/domain_conf.h| 1 + src/cpu/cpu_x86.c | 3 ++ src/cpu/cpu_x86_data.h| 2 ++ 6 files changed, 88 insertions(+), 6 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index f5c882141a..d778fc3f62 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -2033,7 +2033,9 @@ vpindex state='on'/ runtime state='on'/ synic state='on'/ -stimer state='on'/ +stimer state='on' + direct state='on'/ +/stimer reset state='on'/ vendor_id state='on' value='KVM Hv'/ frequencies state='on'/ @@ -2148,9 +2150,9 @@ stimer - Enable SynIC timers - on, off - 1.3.3 (QEMU 2.6) + Enable SynIC timers, optionally with Direct Mode support + on, off; direct - on,off + 1.3.3 (QEMU 2.6), direct mode 5.6.0 (QEMU 4.1) reset diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index a0771da45b..6707dcc634 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5907,7 +5907,7 @@ - + @@ -5956,6 +5956,20 @@ + + + + + + + + + + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 0871f21494..98273ab62a 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -20383,6 +20383,39 @@ virDomainDefParseXML(xmlDocPtr xml, ctxt->node = node; } +if (def->features[VIR_DOMAIN_HYPERV_STIMER] == VIR_TRISTATE_SWITCH_ON) { +int value; +if ((n = virXPathNodeSet("./features/hyperv/stimer/*", ctxt, )) < 0) +goto error; + +for (i = 0; i < n; i++) { +if (STRNEQ((const char *)nodes[i]->name, "direct")) { +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("unsupported Hyper-V stimer feature: %s"), + nodes[i]->name); +goto error; +} + +if (!(tmp = virXMLPropString(nodes[i], "state"))) { +virReportError(VIR_ERR_XML_ERROR, + _("missing 'state' attribute for " + "Hyper-V stimer '%s' feature"), "direct"); +goto error; +} + +if ((value = virTristateSwitchTypeFromString(tmp)) < 0) { +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("invalid value of state argument " + "for Hyper-V stimer '%s' feature"), "direct"); +goto error; +} + +VIR_FREE(tmp); +def->hyperv_stimer_direct = value; +} +VIR_FREE(nodes); +} + if (def->features[VIR_DOMAIN_FEATURE_KVM] == VIR_TRISTATE_SWITCH_ON) { int feature; int value; @@ -22607,6 +22640,17 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src, } } +if (src->hyperv_features[VIR_DOMAIN_HYPERV_STIMER] == VIR_TRISTATE_SWITCH_ON) { +if (src->hyperv_stimer_direct != dst->hyperv_stimer_direct) { +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("State of HyperV stimer direct feature differs: " + "source: '%s', destination: '%s'"), + virTristateSwitchTypeToString(src->hyperv_stimer_direct), + virTristateSwitchTypeToString(dst->hyperv_stimer_direct)); +return false; +} +} + /* kvm */ if (src->features[VIR_DOMAIN_FEATURE_KVM] == VIR_TRISTATE_SWITCH_ON) { for (i = 0; i < VIR_DOMAIN_KVM_LAST; i++) { @@ -28066,7 +28110,6 @@ virDomainDefFormatFeatures(virBufferPtr buf, case VIR_DOMAIN_HYPERV_VPINDEX: case VIR_DOMAIN_HYPERV_RUNTIME: case VIR_DOMAIN_HYPERV_SYNIC: -case VIR_DOMAIN_HYPERV_STIMER: case VIR_DOMAIN_HYPERV_RESET: case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: @@ -28085,6 +28128,23 @@ virDomainDefFormatFeatures(virBufferPtr buf, def->hyperv_spinlocks); break; +
[libvirt] [PATCH v2 0/8] Add support for Direct Mode for Hyper-V Synthetic timers
Changes since v1: - Rebase - Add Ján's R-b tags. - Hardcode 'direct' as the only stimer feature to avoid over-engineering [Ján Tomko] - Split 'conf' patch into three [Ján Tomko] - Minor fixes [Ján Tomko] QEMU-4.1 will bring us Direct Mode for Hyper-V Synthetic timers support, we need to support it in libvirt too. As this is not a new enlightenment but rather an enhancement of an existing one ('stimer'), support it in form. Backwards compatibility is (hopefully) preserved. Vitaly Kuznetsov (8): docs: formatdomain: add stimer flag to the example xml docs: formatdomain: fix 'SynIC' spelling docs: formatdomain: move 'msrs' out of Hyper-V Enlightenments cpu_x86: add Edx to KVM_FEATURE_DEF() conf: change the way how Hyper-V features are printed out conf: add support for Direct Mode for Hyper-V Synthetic timers qemu: add support for Direct Mode for Hyper-V Synthetic timers news: mention Direct Mode for Hyper-V Synthetic timers support docs/formatdomain.html.in | 13 +++-- docs/news.xml | 9 docs/schemas/domaincommon.rng | 16 +- src/conf/domain_conf.c | 77 ++--- src/conf/domain_conf.h | 1 + src/cpu/cpu_x86.c | 35 +++-- src/cpu/cpu_x86_data.h | 2 + src/qemu/qemu_command.c | 12 +++-- src/qemu/qemu_process.c | 20 +++- tests/qemuxml2argvdata/hyperv.args | 4 +- tests/qemuxml2argvdata/hyperv.xml | 4 +- tests/qemuxml2xmloutdata/hyperv.xml | 4 +- 12 files changed, 158 insertions(+), 39 deletions(-) -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v2 1/8] docs: formatdomain: add stimer flag to the example xml
The example XML we have contains all other Hyper-V Enlightenments but 'stimer' is missing. Signed-off-by: Vitaly Kuznetsov Reviewed-by: Ján Tomko --- docs/formatdomain.html.in | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 1938bd875c..0894d9cbfb 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -2033,6 +2033,7 @@ vpindex state='on'/ runtime state='on'/ synic state='on'/ +stimer state='on'/ reset state='on'/ vendor_id state='on' value='KVM Hv'/ frequencies state='on'/ -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v2 7/8] qemu: add support for Direct Mode for Hyper-V Synthetic timers
QEMU-4.1 supports 'Direct Mode' for Hyper-V synthetic timers (hv-stimer-direct CPU flag): Windows guests can request that timer expiration notifications are delivered as normal interrupts (and not VMBus messages). This is used by Hyper-V on KVM. Signed-off-by: Vitaly Kuznetsov --- src/qemu/qemu_command.c | 12 src/qemu/qemu_process.c | 20 ++-- tests/qemuxml2argvdata/hyperv.args | 4 ++-- tests/qemuxml2argvdata/hyperv.xml | 4 +++- tests/qemuxml2xmloutdata/hyperv.xml | 4 +++- 5 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index fee51158a9..be5777023c 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -7151,10 +7151,10 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, } if (def->features[VIR_DOMAIN_FEATURE_HYPERV] == VIR_TRISTATE_SWITCH_ON) { -const char *hvPrefix = "hv-"; +const char *hvDelimiter = "-"; if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CANONICAL_CPU_FEATURES)) -hvPrefix = "hv_"; +hvDelimiter = "_"; for (i = 0; i < VIR_DOMAIN_HYPERV_LAST; i++) { switch ((virDomainHyperv) i) { @@ -7171,9 +7171,13 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, case VIR_DOMAIN_HYPERV_IPI: case VIR_DOMAIN_HYPERV_EVMCS: if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) -virBufferAsprintf(, ",%s%s", - hvPrefix, +virBufferAsprintf(, ",hv%s%s", + hvDelimiter, virDomainHypervTypeToString(i)); +if ((i == VIR_DOMAIN_HYPERV_STIMER) && +(def->hyperv_stimer_direct == VIR_TRISTATE_SWITCH_ON)) +virBufferAsprintf(, ",hv%sstimer%sdirect", hvDelimiter, + hvDelimiter); break; case VIR_DOMAIN_HYPERV_SPINLOCKS: diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 0ee97e2296..ad1a75bfee 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4111,10 +4111,26 @@ qemuProcessVerifyHypervFeatures(virDomainDefPtr def, rc = virCPUDataCheckFeature(cpu, cpuFeature); VIR_FREE(cpuFeature); -if (rc < 0) +if (rc < 0) { return -1; -else if (rc == 1) +} else if (rc == 1) { +if (i == VIR_DOMAIN_HYPERV_STIMER) { +if (def->hyperv_stimer_direct != VIR_TRISTATE_SWITCH_ON) +continue; + +rc = virCPUDataCheckFeature(cpu, "hv-stimer-direct"); +if (rc < 0) +return -1; +else if (rc == 1) +continue; + +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("host doesn't support hyperv stimer '%s' feature"), + "direct"); +return -1; +} continue; +} switch ((virDomainHyperv) i) { case VIR_DOMAIN_HYPERV_RELAXED: diff --git a/tests/qemuxml2argvdata/hyperv.args b/tests/qemuxml2argvdata/hyperv.args index 086adaa349..8040da9caa 100644 --- a/tests/qemuxml2argvdata/hyperv.args +++ b/tests/qemuxml2argvdata/hyperv.args @@ -12,8 +12,8 @@ QEMU_AUDIO_DRV=none \ -S \ -machine pc,accel=tcg,usb=off,dump-guest-core=off \ -cpu 'qemu32,hv_relaxed,hv_vapic,hv-spinlocks=0x2fff,hv_vpindex,hv_runtime,\ -hv_synic,hv_stimer,hv_reset,hv-vendor-id=KVM Hv,hv_frequencies,\ -hv_reenlightenment,hv_tlbflush,hv_ipi,hv_evmcs' \ +hv_synic,hv_stimer,hv_stimer_direct,hv_reset,hv-vendor-id=KVM Hv,\ +hv_frequencies,hv_reenlightenment,hv_tlbflush,hv_ipi,hv_evmcs' \ -m 214 \ -realtime mlock=off \ -smp 6,sockets=6,cores=1,threads=1 \ diff --git a/tests/qemuxml2argvdata/hyperv.xml b/tests/qemuxml2argvdata/hyperv.xml index c6feaed528..ae0f934f76 100644 --- a/tests/qemuxml2argvdata/hyperv.xml +++ b/tests/qemuxml2argvdata/hyperv.xml @@ -17,7 +17,9 @@ - + + + diff --git a/tests/qemuxml2xmloutdata/hyperv.xml b/tests/qemuxml2xmloutdata/hyperv.xml index 5510d3dfad..2e4b43d4c6 100644 --- a/tests/qemuxml2xmloutdata/hyperv.xml +++ b/tests/qemuxml2xmloutdata/hyperv.xml @@ -17,7 +17,9 @@ - + + + -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v2 2/8] docs: formatdomain: fix 'SynIC' spelling
SynIC stands for 'Synthetic Interrupt Controller', it is not a NIC. Fix the spelling in accordance with Hypervisor Top Level Functional Specification. Signed-off-by: Vitaly Kuznetsov Reviewed-by: Ján Tomko --- docs/formatdomain.html.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 0894d9cbfb..44b1ae7597 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -2142,13 +2142,13 @@ synic - Enable Synthetic Interrupt Controller (SyNIC) + Enable Synthetic Interrupt Controller (SynIC) on, off 1.3.3 (QEMU 2.6) stimer - Enable SyNIC timers + Enable SynIC timers on, off 1.3.3 (QEMU 2.6) -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v2 4/8] cpu_x86: add Edx to KVM_FEATURE_DEF()
Some Hyper-V features (like the upcoming Direct Synthetic timers) are announced by feature bits in Edx but KVM_FEATURE_DEF() supports only Eax. Signed-off-by: Vitaly Kuznetsov --- src/cpu/cpu_x86.c | 32 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 387c365512..8575915597 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -59,9 +59,9 @@ struct _virCPUx86Feature { { .type = VIR_CPU_X86_DATA_CPUID, \ .data = { .cpuid = {__VA_ARGS__} } } -#define KVM_FEATURE_DEF(Name, Eax_in, Eax) \ +#define KVM_FEATURE_DEF(Name, Eax_in, Eax, Edx) \ static virCPUx86DataItem Name ## _data[] = { \ -CPUID(.eax_in = Eax_in, .eax = Eax), \ +CPUID(.eax_in = Eax_in, .eax = Eax, .edx = Edx), \ } #define KVM_FEATURE(Name) \ @@ -74,34 +74,34 @@ struct _virCPUx86Feature { } KVM_FEATURE_DEF(VIR_CPU_x86_KVM_PV_UNHALT, -0x4001, 0x0080); +0x4001, 0x0080, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_RUNTIME, -0x4003, 0x0001); +0x4003, 0x0001, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_SYNIC, -0x4003, 0x0004); +0x4003, 0x0004, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_STIMER, -0x4003, 0x0008); +0x4003, 0x0008, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_RELAXED, -0x4003, 0x0020); +0x4003, 0x0020, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_SPINLOCKS, -0x4003, 0x0022); +0x4003, 0x0022, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_VAPIC, -0x4003, 0x0030); +0x4003, 0x0030, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_VPINDEX, -0x4003, 0x0040); +0x4003, 0x0040, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_RESET, -0x4003, 0x0080); +0x4003, 0x0080, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_FREQUENCIES, -0x4003, 0x0800); +0x4003, 0x0800, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_REENLIGHTENMENT, -0x4003, 0x2000); +0x4003, 0x2000, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_TLBFLUSH, -0x4004, 0x0004); +0x4004, 0x0004, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_IPI, -0x4004, 0x0400); +0x4004, 0x0400, 0x0); KVM_FEATURE_DEF(VIR_CPU_x86_HV_EVMCS, -0x4004, 0x4000); +0x4004, 0x4000, 0x0); static virCPUx86Feature x86_kvm_features[] = { -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v2 5/8] conf: change the way how Hyper-V features are printed out
Current code doesn't allow us to add sub-features as we always print the closing '/>'. As a preparatory change to implementing 'direct' sub-feature for 'stimer' feature switch to printing closing tag individually. No functional change. Signed-off-by: Vitaly Kuznetsov --- src/conf/domain_conf.c | 15 +-- 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 441eb1a5a2..0871f21494 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -28073,19 +28073,24 @@ virDomainDefFormatFeatures(virBufferPtr buf, case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: case VIR_DOMAIN_HYPERV_EVMCS: +virBufferAddLit(, "/>\n"); break; case VIR_DOMAIN_HYPERV_SPINLOCKS: -if (def->hyperv_features[j] != VIR_TRISTATE_SWITCH_ON) +if (def->hyperv_features[j] != VIR_TRISTATE_SWITCH_ON) { +virBufferAddLit(, "/>\n"); break; -virBufferAsprintf(, " retries='%d'", +} +virBufferAsprintf(, " retries='%d'/>\n", def->hyperv_spinlocks); break; case VIR_DOMAIN_HYPERV_VENDOR_ID: -if (def->hyperv_features[j] != VIR_TRISTATE_SWITCH_ON) +if (def->hyperv_features[j] != VIR_TRISTATE_SWITCH_ON) { +virBufferAddLit(, "/>\n"); break; -virBufferEscapeString(, " value='%s'", +} +virBufferEscapeString(, " value='%s'/>\n", def->hyperv_vendor_id); break; @@ -28093,8 +28098,6 @@ virDomainDefFormatFeatures(virBufferPtr buf, case VIR_DOMAIN_HYPERV_LAST: break; } - -virBufferAddLit(, "/>\n"); } virBufferAdjustIndent(, -2); virBufferAddLit(, "\n"); -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v2 3/8] docs: formatdomain: move 'msrs' out of Hyper-V Enlightenments
Introduced by: commit e9528f41c612fff334e958d5e5df197aa8e83792 'msrs' is a feature unrelated to Hyper-V Enlightenments, the commit message which added it and the test have it right: ... ... Signed-off-by: Vitaly Kuznetsov Reviewed-by: Ján Tomko --- docs/formatdomain.html.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 44b1ae7597..f5c882141a 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -2041,7 +2041,6 @@ tlbflush state='on'/ ipi state='on'/ evmcs state='on'/ -msrs unknown='ignore'/ /hyperv kvm hidden state='on'/ @@ -2057,6 +2056,7 @@ tseg unit='MiB'48/tseg /smm htm state='on'/ + msrs unknown='ignore'/ /features ... -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 0/5] Fix hyperv and kvm features with QEMU 4.1
Jiri Denemark writes: > Originally the names of the hyperv and kvm CPU features were only used > internally for looking up their CPUID bits. But with QEMU 4.1 we check > which features were enabled or disabled by a freshly started QEMU > process using their names rather than their CPUID bits (mostly because > of MSR features). Thus we need to change our made up internal names into > the actual names used by QEMU. > > Otherwise libvirt would mistakenly report the features as unavailable > and refuse to start any domain using them with QEMU 4.1. > > Reported-by: Vitaly Kuznetsov > It seems to resolve my issue, so Tested-by: Vitaly Kuznetsov I'll rebase my 'direct stimer' on top of this, thanks! -- Vitaly -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 4/6] conf: add support for Direct Mode for Hyper-V Synthetic timers
Ján Tomko writes: > On Thu, Jul 25, 2019 at 03:52:16PM +0200, Vitaly Kuznetsov wrote: >>Support 'Direct Mode' for Hyper-V Synthetic Timers in domain config. >>Make it 'stimer' enlightenment option as it is not a separate thing. >> >>Signed-off-by: Vitaly Kuznetsov >>--- >> docs/formatdomain.html.in | 10 ++- >> docs/schemas/domaincommon.rng | 16 +++- >> src/conf/domain_conf.c| 138 +++--- >> src/conf/domain_conf.h| 8 ++ >> src/cpu/cpu_x86.c | 51 +++-- >> src/cpu/cpu_x86_data.h| 2 + >> src/libvirt_private.syms | 2 + >> 7 files changed, 187 insertions(+), 40 deletions(-) >> >>diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in >>index 1aaddb6d9b..a0723edad1 100644 >>--- a/docs/formatdomain.html.in >>+++ b/docs/formatdomain.html.in >>@@ -2033,7 +2033,9 @@ >> vpindex state='on'/ >> runtime state='on'/ >> synic state='on'/ >>-stimer state='on'/ >>+stimer state='on' >>+ direct state='on'/ >>+/stimer >> reset state='on'/ >> vendor_id state='on' value='KVM Hv'/ >> frequencies state='on'/ >>@@ -2148,9 +2150,9 @@ >> >> >> stimer >>- Enable SynIC timers >>- on, off >>- 1.3.3 (QEMU 2.6) >>+ Enable SynIC timers, optionally with Direct Mode support >>+ on, off; direct - on,off >>+ 1.3.3 (QEMU 2.6), direct mode 5.6.0 (QEMU >>4.1) >> >> >> reset >>diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng >>index 763480440c..8cf1995748 100644 >>--- a/docs/schemas/domaincommon.rng >>+++ b/docs/schemas/domaincommon.rng >>@@ -5896,7 +5896,7 @@ >> >> >> >>- >>+ >> >> >> >>@@ -5945,6 +5945,20 @@ >> >> >> >>+ >>+ >>+ >>+ >>+ >>+ >>+ >>+ >>+ >>+ >>+ >>+ >>+ >>+ >> >> >> >>diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c >>index 0574c69a46..779b4ed880 100644 >>--- a/src/conf/domain_conf.c >>+++ b/src/conf/domain_conf.c >>@@ -197,6 +197,11 @@ VIR_ENUM_IMPL(virDomainHyperv, >> "evmcs", >> ); >> >>+VIR_ENUM_IMPL(virDomainHypervStimer, >>+ VIR_DOMAIN_HYPERV_STIMER_LAST, >>+ "direct", >>+); > > Do you anticipate more stimer "sub"-features in the future? > Having an enum with one value just to loop over an array with one > element and then switch()-ing across all the possible value seems > like overkill. > I don't anticipate any sub-features for stimer for the time being, however, I wanted to make code look like what we already have (e.g. virDomainKVM). We can, of course, simplify things if we consider 'direct' being the one and only. >>+ >> VIR_ENUM_IMPL(virDomainKVM, >> VIR_DOMAIN_KVM_LAST, >> "hidden", >>@@ -20359,6 +20364,51 @@ virDomainDefParseXML(xmlDocPtr xml, >> ctxt->node = node; >> } >> >>+if (def->features[VIR_DOMAIN_HYPERV_STIMER] == VIR_TRISTATE_SWITCH_ON) { >>+int feature; >>+int value; >>+if ((n = virXPathNodeSet("./features/hyperv/stimer/*", ctxt, >>)) < 0) >>+goto error; >>+ >>+for (i = 0; i < n; i++) { >>+feature = virDomainHypervStimerTypeFromString((const char >>*)nodes[i]->name); >>+if (feature < 0) { >>+virReportError(VIR_ERR_CONFIG_UNSUPPORTED, >>+ _("unsupported Hyper-V stimer feature: %s"), >>+ nodes[i]->name); >>+goto error; >>+} >>+ >>+switch ((virDomainHypervStimer) feature) { >>+case VIR_DOMAIN_HYPERV_STIMER_DIRECT: >>+if (!(tmp = virXMLPropString(nodes[i], "state"))) { >>+virReportError(VIR_ERR_XML_ERROR, >>+ _("missing 'state' attribute for " >>+ "Hyper-V stimer feature '%s'"), >>+
[libvirt] [PATCH 4/6] conf: add support for Direct Mode for Hyper-V Synthetic timers
Support 'Direct Mode' for Hyper-V Synthetic Timers in domain config. Make it 'stimer' enlightenment option as it is not a separate thing. Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 10 ++- docs/schemas/domaincommon.rng | 16 +++- src/conf/domain_conf.c| 138 +++--- src/conf/domain_conf.h| 8 ++ src/cpu/cpu_x86.c | 51 +++-- src/cpu/cpu_x86_data.h| 2 + src/libvirt_private.syms | 2 + 7 files changed, 187 insertions(+), 40 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 1aaddb6d9b..a0723edad1 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -2033,7 +2033,9 @@ vpindex state='on'/ runtime state='on'/ synic state='on'/ -stimer state='on'/ +stimer state='on' + direct state='on'/ +/stimer reset state='on'/ vendor_id state='on' value='KVM Hv'/ frequencies state='on'/ @@ -2148,9 +2150,9 @@ stimer - Enable SynIC timers - on, off - 1.3.3 (QEMU 2.6) + Enable SynIC timers, optionally with Direct Mode support + on, off; direct - on,off + 1.3.3 (QEMU 2.6), direct mode 5.6.0 (QEMU 4.1) reset diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 763480440c..8cf1995748 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5896,7 +5896,7 @@ - + @@ -5945,6 +5945,20 @@ + + + + + + + + + + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 0574c69a46..779b4ed880 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -197,6 +197,11 @@ VIR_ENUM_IMPL(virDomainHyperv, "evmcs", ); +VIR_ENUM_IMPL(virDomainHypervStimer, + VIR_DOMAIN_HYPERV_STIMER_LAST, + "direct", +); + VIR_ENUM_IMPL(virDomainKVM, VIR_DOMAIN_KVM_LAST, "hidden", @@ -20359,6 +20364,51 @@ virDomainDefParseXML(xmlDocPtr xml, ctxt->node = node; } +if (def->features[VIR_DOMAIN_HYPERV_STIMER] == VIR_TRISTATE_SWITCH_ON) { +int feature; +int value; +if ((n = virXPathNodeSet("./features/hyperv/stimer/*", ctxt, )) < 0) +goto error; + +for (i = 0; i < n; i++) { +feature = virDomainHypervStimerTypeFromString((const char *)nodes[i]->name); +if (feature < 0) { +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("unsupported Hyper-V stimer feature: %s"), + nodes[i]->name); +goto error; +} + +switch ((virDomainHypervStimer) feature) { +case VIR_DOMAIN_HYPERV_STIMER_DIRECT: +if (!(tmp = virXMLPropString(nodes[i], "state"))) { +virReportError(VIR_ERR_XML_ERROR, + _("missing 'state' attribute for " + "Hyper-V stimer feature '%s'"), + nodes[i]->name); +goto error; +} + +if ((value = virTristateSwitchTypeFromString(tmp)) < 0) { +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("invalid value of state argument " + "for Hyper-V stimer feature '%s'"), + nodes[i]->name); +goto error; +} + +VIR_FREE(tmp); +def->hyperv_stimer_features[feature] = value; +break; + +/* coverity[dead_error_begin] */ +case VIR_DOMAIN_HYPERV_STIMER_LAST: +break; +} +} +VIR_FREE(nodes); +} + if (def->features[VIR_DOMAIN_FEATURE_KVM] == VIR_TRISTATE_SWITCH_ON) { int feature; int value; @@ -22583,6 +22633,29 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src, } } +if (src->hyperv_features[VIR_DOMAIN_HYPERV_STIMER] == VIR_TRISTATE_SWITCH_ON) { +for (i = 0; i < VIR_DOMAIN_HYPERV_STIMER_LAST; i++) { +switch ((virDomainHypervStimer) i) { +case VIR_DOMAIN_HYPERV_STIMER_DIRECT: +if (src->hyperv_stimer_features[i] != dst->hyperv_stimer_features[i]) { +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, +
[libvirt] [PATCH 5/6] qemu: add support for Direct Mode for Hyper-V Synthetic timers
QEMU-4.1 supports 'Direct Mode' for Hyper-V synthetic timers (hv-stimer-direct CPU flag): Windows guests can request that timer expiration notifications are delivered as normal interrupts (and not VMBus messages). This is used by Hyper-V on KVM. Signed-off-by: Vitaly Kuznetsov --- src/qemu/qemu_command.c | 22 ++-- src/qemu/qemu_process.c | 39 +++-- tests/qemuxml2argvdata/hyperv.args | 4 +-- tests/qemuxml2argvdata/hyperv.xml | 4 ++- tests/qemuxml2xmloutdata/hyperv.xml | 4 ++- 5 files changed, 65 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 1cf165079f..12229e879e 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -7096,7 +7096,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, int ret = -1; virBuffer cpu_buf = VIR_BUFFER_INITIALIZER; virBuffer buf = VIR_BUFFER_INITIALIZER; -size_t i; +size_t i, j; if (def->cpu && (def->cpu->mode != VIR_CPU_MODE_CUSTOM || def->cpu->model)) { @@ -7158,7 +7158,6 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, case VIR_DOMAIN_HYPERV_VPINDEX: case VIR_DOMAIN_HYPERV_RUNTIME: case VIR_DOMAIN_HYPERV_SYNIC: -case VIR_DOMAIN_HYPERV_STIMER: case VIR_DOMAIN_HYPERV_RESET: case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: @@ -7170,6 +7169,25 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, virDomainHypervTypeToString(i)); break; +case VIR_DOMAIN_HYPERV_STIMER: +if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) +virBufferAsprintf(, ",hv_%s", + virDomainHypervTypeToString(i)); +for (j = 0; j < VIR_DOMAIN_HYPERV_STIMER_LAST; j++) { +switch ((virDomainHypervStimer) j) { +case VIR_DOMAIN_HYPERV_STIMER_DIRECT: +if (def->hyperv_stimer_features[j] == VIR_TRISTATE_SWITCH_ON) +virBufferAsprintf(, ",hv_stimer_%s", + virDomainHypervStimerTypeToString(j)); +break; + +/* coverity[dead_error_begin] */ +case VIR_DOMAIN_HYPERV_STIMER_LAST: +break; +} +} +break; + case VIR_DOMAIN_HYPERV_SPINLOCKS: if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) virBufferAsprintf(, ",hv_spinlocks=0x%x", diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 75205bc121..0235cfd022 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4111,10 +4111,45 @@ qemuProcessVerifyHypervFeatures(virDomainDefPtr def, rc = virCPUDataCheckFeature(cpu, cpuFeature); VIR_FREE(cpuFeature); -if (rc < 0) +if (rc < 0) { return -1; -else if (rc == 1) +} else if (rc == 1) { +if ((i == VIR_DOMAIN_HYPERV_STIMER)) { +size_t j; + +for (j = 0; j < VIR_DOMAIN_HYPERV_STIMER_LAST; j++) { +switch ((virDomainHypervStimer) j) { +case VIR_DOMAIN_HYPERV_STIMER_DIRECT: +if (def->hyperv_stimer_features[j] != VIR_TRISTATE_SWITCH_ON) +continue; + +if (virAsprintf(, "__kvm_hv_stimer_%s", +virDomainHypervStimerTypeToString(j)) < 0) +return -1; + +rc = virCPUDataCheckFeature(cpu, cpuFeature); +VIR_FREE(cpuFeature); + +if (rc < 0) +return -1; +else if (rc == 1) +continue; + +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("host doesn't support hyperv stimer '%s' feature"), + virDomainHypervStimerTypeToString(i)); +return -1; + +/* coverity[dead_error_begin] */ +case VIR_DOMAIN_HYPERV_STIMER_LAST: +break; +} +} + +} + continue; +} switch ((virDomainHyperv) i) { case VIR_DOMAIN_HYPERV_RELAXED: diff --git a/tests/qemuxml2argvdata/hyperv.args b/tests/qemuxml2argvdata/hyperv.args index c557b6d8fe..a8f47ebb21 100644 --- a/tests/qemuxml2argvdata/hyperv.args +++ b/tests/qemuxml2argvdata/hyperv.args @@ -12,8 +12,8 @@ QEMU_AUDIO_DRV=none \ -
[libvirt] [PATCH 1/6] docs: formatdomain: add synic flag to the example xml
The example XML we have contains all other Hyper-V Enlightenments but 'stimer' is missing. Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 1d57729394..0aedd9efbb 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -2033,6 +2033,7 @@ vpindex state='on'/ runtime state='on'/ synic state='on'/ +stimer state='on'/ reset state='on'/ vendor_id state='on' value='KVM Hv'/ frequencies state='on'/ -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH 6/6] news: mention Direct Mode for Hyper-V Synthetic timers support
The QEMU driver now supports Direct Mode for Hyper-V Synthetic timers for Hyper-V guests. Signed-off-by: Vitaly Kuznetsov --- docs/news.xml | 9 + 1 file changed, 9 insertions(+) diff --git a/docs/news.xml b/docs/news.xml index 1134309ec2..e4d8f1ecac 100644 --- a/docs/news.xml +++ b/docs/news.xml @@ -54,6 +54,15 @@ + + + qemu: Support Direct Mode for Hyper-V Synthetic timers + + + The QEMU driver now supports Direct Mode for Hyper-V Synthetic timers + for Hyper-V guests. + + qemu: Introduce a new video model of type 'bochs' -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH 3/6] docs: formatdomain: move 'msrs' out of Hyper-V Enlightenments
'msrs' is a feature unrelated to Hyper-V Enlightenments, the commit message which added it and the test have it right: ... ... Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index ee00aa9cbd..1aaddb6d9b 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -2041,7 +2041,6 @@ tlbflush state='on'/ ipi state='on'/ evmcs state='on'/ -msrs unknown='ignore'/ /hyperv kvm hidden state='on'/ @@ -2057,6 +2056,7 @@ tseg unit='MiB'48/tseg /smm htm state='on'/ + msrs unknown='ignore'/ /features ... -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH 2/6] docs: formatdomain: fix 'SynIC' spelling
SynIC stands for 'Synthetic Interrupt Controller', it is not a NIC. Fix the spelling in accordance with Hypervisor Top Level Functional Specification. Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 0aedd9efbb..ee00aa9cbd 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -2142,13 +2142,13 @@ synic - Enable Synthetic Interrupt Controller (SyNIC) + Enable Synthetic Interrupt Controller (SynIC) on, off 1.3.3 (QEMU 2.6) stimer - Enable SyNIC timers + Enable SynIC timers on, off 1.3.3 (QEMU 2.6) -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH 0/6] Add support for Direct Mode for Hyper-V Synthetic timers
QEMU-4.1 will bring us Direct Mode for Hyper-V Synthetic timers support, we need to support it in libvirt too. As this is not a new enlightenment but rather an enhancement of an existing one ('stimer'), support it in form. Backwards compatibility is (hopefully) preserved. Because of an existing imcompatibility between libvirt-5.5+ and QEMU-4.1-git (see https://www.redhat.com/archives/libvir-list/2019-July/msg01435.html) I had to backport hv-stimer-direct to QEMU-4.0 to test this. If someone wants to do it too here is a list of QEMU patches needed: 128531d9e1 i386/kvm: add support for Direct Mode for Hyper-V synthetic timers 8caba36db5 i386/kvm: hv-evmcs requires hv-vapic bd59fbdf4f i386/kvm: hv-tlbflush/ipi require hv-vpindex c686193072 i386/kvm: hv-stimer requires hv-time and hv-synic e48ddcc6ce i386/kvm: implement 'hv-passthrough' mode fb19f72b77 i386/kvm: document existing Hyper-V enlightenments 2344d22e50 i386/kvm: move Hyper-V CPUID filling to hyperv_handle_properties() 6760bd2002 i386/kvm: add support for KVM_GET_SUPPORTED_HV_CPUID 2d384d7c83 i386/kvm: convert hyperv enlightenments properties from bools to bits Vitaly Kuznetsov (6): docs: formatdomain: add synic flag to the example xml docs: formatdomain: fix 'SynIC' spelling docs: formatdomain: move 'msrs' out of Hyper-V Enlightenments conf: add support for Direct Mode for Hyper-V Synthetic timers qemu: add support for Direct Mode for Hyper-V Synthetic timers news: mention Direct Mode for Hyper-V Synthetic timers support docs/formatdomain.html.in | 13 ++- docs/news.xml | 9 ++ docs/schemas/domaincommon.rng | 16 +++- src/conf/domain_conf.c | 138 +--- src/conf/domain_conf.h | 8 ++ src/cpu/cpu_x86.c | 51 +- src/cpu/cpu_x86_data.h | 2 + src/libvirt_private.syms| 2 + src/qemu/qemu_command.c | 22 - src/qemu/qemu_process.c | 39 +++- tests/qemuxml2argvdata/hyperv.args | 4 +- tests/qemuxml2argvdata/hyperv.xml | 4 +- tests/qemuxml2xmloutdata/hyperv.xml | 4 +- 13 files changed, 263 insertions(+), 49 deletions(-) -- 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [BUG] Hyper-V Enlightenments are broken in 5.5.0+
Jiri Denemark writes: > On Thu, Jul 25, 2019 at 11:09:28 +0200, Vitaly Kuznetsov wrote: >> Jiri Denemark writes: >> >> > On Wed, Jul 24, 2019 at 18:48:38 +0200, Vitaly Kuznetsov wrote: >> >> Hi, >> >> >> >> when some Hyper-V enlightenments are added to the domain configuration, >> >> e.g. >> >> >> >> >> >> ... >> >> >> >> .. >> >> >> >> >> >> ... >> >> >> >> I'm observing the following: >> >> >> >> # virsh create /etc/libvirt/qemu/win2k16.xml >> >> error: Failed to create domain from /etc/libvirt/qemu/win2k16.xml >> >> error: unsupported configuration: host doesn't support hyperv 'vpindex' >> >> feature >> >> >> >> the feature is, of course, supported in KVM/QEMU. >> >> >> >> I've bisected the problem to the particular commit: >> >> >> >> commit 63acb7bfd56f117309e4fcaf438639d4d7bc7dcb >> >> Author: Jiri Denemark >> >> Date: Mon Jun 17 23:38:46 2019 +0200 >> >> >> >> qemu_process: Prefer generic qemuMonitorGetGuestCPU >> >> >> >> Any ideas? >> > >> > Is this with QEMU 4.0 (or older) or a current git, i.e., almost 4.1? >> >> QEMU-4.0 is definitely affected. > > Hmm, QEMU 4.0 does not support unavailable-features CPU property, which > means the mentioned commit is a no-op. And I can't reproduce your issue > in this case. > > However, QEMU 4.1.0-rc1 supports unavailable-features and I can > reproduce the bug. Looks like something is wrong with the new way of > checking for enabled CPU features. Sorry, was a bug in my testing. This was QEMU-4.1 from git indeed. -- Vitaly -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [BUG] Hyper-V Enlightenments are broken in 5.5.0+
Jiri Denemark writes: > On Wed, Jul 24, 2019 at 18:48:38 +0200, Vitaly Kuznetsov wrote: >> Hi, >> >> when some Hyper-V enlightenments are added to the domain configuration, >> e.g. >> >> >> ... >> >> .. >> >> >> ... >> >> I'm observing the following: >> >> # virsh create /etc/libvirt/qemu/win2k16.xml >> error: Failed to create domain from /etc/libvirt/qemu/win2k16.xml >> error: unsupported configuration: host doesn't support hyperv 'vpindex' >> feature >> >> the feature is, of course, supported in KVM/QEMU. >> >> I've bisected the problem to the particular commit: >> >> commit 63acb7bfd56f117309e4fcaf438639d4d7bc7dcb >> Author: Jiri Denemark >> Date: Mon Jun 17 23:38:46 2019 +0200 >> >> qemu_process: Prefer generic qemuMonitorGetGuestCPU >> >> Any ideas? > > Is this with QEMU 4.0 (or older) or a current git, i.e., almost 4.1? > QEMU-4.0 is definitely affected. -- Vitaly -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [BUG] Hyper-V Enlightenments are broken in 5.5.0+
Hi, when some Hyper-V enlightenments are added to the domain configuration, e.g. ... .. ... I'm observing the following: # virsh create /etc/libvirt/qemu/win2k16.xml error: Failed to create domain from /etc/libvirt/qemu/win2k16.xml error: unsupported configuration: host doesn't support hyperv 'vpindex' feature the feature is, of course, supported in KVM/QEMU. I've bisected the problem to the particular commit: commit 63acb7bfd56f117309e4fcaf438639d4d7bc7dcb Author: Jiri Denemark Date: Mon Jun 17 23:38:46 2019 +0200 qemu_process: Prefer generic qemuMonitorGetGuestCPU Any ideas? -- Vitaly -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v3 6/6] news: mention Hyper-V PV IPI and Enlightened VMCS support
The QEMU driver now has support for Hyper-V PV IPI and Enlightened VMCS for Windows and Hyper-V guests. Suggested-by: Andrea Bolognani Signed-off-by: Vitaly Kuznetsov --- docs/news.xml | 9 + 1 file changed, 9 insertions(+) diff --git a/docs/news.xml b/docs/news.xml index 88774c55ae..0f603f568c 100644 --- a/docs/news.xml +++ b/docs/news.xml @@ -35,6 +35,15 @@ + + + qemu: Add Hyper-V PV IPI and Enlightened VMCS support + + + The QEMU driver now has support for Hyper-V PV IPI and Enlightened VMCS + for Windows and Hyper-V guests. + + -- 2.17.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v3 5/6] qemu: add support for Hyper-V Enlightened VMCS
QEMU 3.1 supports Hyper-V Enlightened VMCS feature which significantly speeds up nested Hyper-V on KVM environments. Signed-off-by: Vitaly Kuznetsov --- src/qemu/qemu_command.c | 2 +- src/qemu/qemu_parse_command.c | 2 +- src/qemu/qemu_process.c | 2 +- tests/qemuxml2argvdata/hyperv-off.xml | 1 + tests/qemuxml2argvdata/hyperv.args | 2 +- tests/qemuxml2argvdata/hyperv.xml | 1 + tests/qemuxml2xmloutdata/hyperv-off.xml | 1 + tests/qemuxml2xmloutdata/hyperv.xml | 1 + 8 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 27e77f7d66..d543ada2a1 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6883,6 +6883,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: +case VIR_DOMAIN_HYPERV_EVMCS: if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) virBufferAsprintf(, ",hv_%s", virDomainHypervTypeToString(i)); @@ -6900,7 +6901,6 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, def->hyperv_vendor_id); break; -case VIR_DOMAIN_HYPERV_EVMCS: /* coverity[dead_error_begin] */ case VIR_DOMAIN_HYPERV_LAST: break; diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c index a1f8369919..d91fc8d901 100644 --- a/src/qemu/qemu_parse_command.c +++ b/src/qemu/qemu_parse_command.c @@ -1540,6 +1540,7 @@ qemuParseCommandLineCPU(virDomainDefPtr dom, case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: +case VIR_DOMAIN_HYPERV_EVMCS: if (value) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("HyperV feature '%s' should not " @@ -1580,7 +1581,6 @@ qemuParseCommandLineCPU(virDomainDefPtr dom, break; -case VIR_DOMAIN_HYPERV_EVMCS: case VIR_DOMAIN_HYPERV_LAST: break; } diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index ed8bcf7f76..ebe8e244ae 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3954,12 +3954,12 @@ qemuProcessVerifyHypervFeatures(virDomainDefPtr def, case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: +case VIR_DOMAIN_HYPERV_EVMCS: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("host doesn't support hyperv '%s' feature"), virDomainHypervTypeToString(i)); return -1; -case VIR_DOMAIN_HYPERV_EVMCS: /* coverity[dead_error_begin] */ case VIR_DOMAIN_HYPERV_VENDOR_ID: case VIR_DOMAIN_HYPERV_LAST: diff --git a/tests/qemuxml2argvdata/hyperv-off.xml b/tests/qemuxml2argvdata/hyperv-off.xml index e51cca45b5..59c1e17ccd 100644 --- a/tests/qemuxml2argvdata/hyperv-off.xml +++ b/tests/qemuxml2argvdata/hyperv-off.xml @@ -24,6 +24,7 @@ + diff --git a/tests/qemuxml2argvdata/hyperv.args b/tests/qemuxml2argvdata/hyperv.args index 0800e4f79d..5d59788e14 100644 --- a/tests/qemuxml2argvdata/hyperv.args +++ b/tests/qemuxml2argvdata/hyperv.args @@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ -machine pc,accel=tcg,usb=off,dump-guest-core=off \ -cpu 'qemu32,hv_relaxed,hv_vapic,hv_spinlocks=0x2fff,hv_vpindex,hv_runtime,\ hv_synic,hv_stimer,hv_reset,hv_vendor_id=KVM Hv,hv_frequencies,\ -hv_reenlightenment,hv_tlbflush,hv_ipi' \ +hv_reenlightenment,hv_tlbflush,hv_ipi,hv_evmcs' \ -m 214 \ -smp 6,sockets=6,cores=1,threads=1 \ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ diff --git a/tests/qemuxml2argvdata/hyperv.xml b/tests/qemuxml2argvdata/hyperv.xml index 05c7d478f7..c6feaed528 100644 --- a/tests/qemuxml2argvdata/hyperv.xml +++ b/tests/qemuxml2argvdata/hyperv.xml @@ -24,6 +24,7 @@ + diff --git a/tests/qemuxml2xmloutdata/hyperv-off.xml b/tests/qemuxml2xmloutdata/hyperv-off.xml index 2282b763b5..1b7d82b14a 100644 --- a/tests/qemuxml2xmloutdata/hyperv-off.xml +++ b/tests/qemuxml2xmloutdata/hyperv-off.xml @@ -24,6 +24,7 @@ + diff --git a/tests/qemuxml2xmloutdata/hyperv.xml b/tests/qemuxml2xmloutdata/hyperv.xml index 97f387c172..5510d3dfad 100644 --- a/tests/qemuxml2xmloutdata/hyperv.xml +++ b/tests/qemuxml2xmloutdata/hyperv.xml @@ -24,6 +24,7 @@ + -- 2.17.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v3 2/6] conf: add support for Hyper-V PV IPIs
Support Hyper-V PV IPI enlightenment in domain config. QEMU support will be implemented in the next patch, adding interim VIR_DOMAIN_HYPERV_IPI cases to src/qemu/* for now. Reviewed-by: Andrea Bolognani Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 7 +++ docs/schemas/domaincommon.rng | 5 + src/conf/domain_conf.c| 7 ++- src/conf/domain_conf.h| 1 + src/cpu/cpu_x86.c | 3 +++ src/cpu/cpu_x86_data.h| 1 + src/qemu/qemu_command.c | 1 + src/qemu/qemu_parse_command.c | 1 + src/qemu/qemu_process.c | 1 + 9 files changed, 26 insertions(+), 1 deletion(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 28246deb63..7592f13a84 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1981,6 +1981,7 @@ frequencies state='on'/ reenlightenment state='on'/ tlbflush state='on'/ +ipi state='on'/ /hyperv kvm hidden state='on'/ @@ -2121,6 +2122,12 @@ on, off 4.7.0 (QEMU 3.0) + + ipi + Enable PV IPI support + on, off + 4.10.0 (QEMU 3.1) + pvspinlock diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index b9ac5df479..26019b3279 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5769,6 +5769,11 @@ + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index e8e0adc819..24876994c5 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -172,7 +172,9 @@ VIR_ENUM_IMPL(virDomainHyperv, VIR_DOMAIN_HYPERV_LAST, "vendor_id", "frequencies", "reenlightenment", - "tlbflush") + "tlbflush", + "ipi", +); VIR_ENUM_IMPL(virDomainKVM, VIR_DOMAIN_KVM_LAST, "hidden") @@ -19990,6 +19992,7 @@ virDomainDefParseXML(xmlDocPtr xml, case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: +case VIR_DOMAIN_HYPERV_IPI: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: @@ -22184,6 +22187,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src, case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: +case VIR_DOMAIN_HYPERV_IPI: if (src->hyperv_features[i] != dst->hyperv_features[i]) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("State of HyperV enlightenment " @@ -27948,6 +27952,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: +case VIR_DOMAIN_HYPERV_IPI: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index e30a4b2fe7..9eea75548d 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1795,6 +1795,7 @@ typedef enum { VIR_DOMAIN_HYPERV_FREQUENCIES, VIR_DOMAIN_HYPERV_REENLIGHTENMENT, VIR_DOMAIN_HYPERV_TLBFLUSH, +VIR_DOMAIN_HYPERV_IPI, VIR_DOMAIN_HYPERV_LAST } virDomainHyperv; diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 69a0c8db28..33252e927e 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -114,6 +114,8 @@ KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_REENLIGHTENMENT, 0x4003, 0x2000); KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_TLBFLUSH, 0x4004, 0x0004); +KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_IPI, +0x4004, 0x0400); static virCPUx86Feature x86_kvm_features[] = { @@ -137,6 +139,7 @@ static virCPUx86Feature x86_kvm_features[] = KVM_FEATURE(VIR_CPU_x86_KVM_HV_FREQUENCIES), KVM_FEATURE(VIR_CPU_x86_KVM_HV_REENLIGHTENMENT), KVM_FEATURE(VIR_CPU_x86_KVM_HV_TLBFLUSH), +KVM_FEATURE(VIR_CPU_x86_KVM_HV_IPI), }; typedef struct _virCPUx86Model virCPUx86Model; diff --git a/src/cpu/cpu_x86_data.h b/src/cpu/cpu_x86_data.h index e75b3a2d0d..8c51d88e1a 100644 --- a/src/cpu/cpu_x86_data.h +++ b/src/cpu/cpu_x86_data.h @@ -65,6 +65,7 @@ struct _virCPUx86CPUID { # define VIR_CPU_x86_KVM_HV_FREQUENCIES "__kvm_hv_frequencies" # define VIR_CPU_x86_KVM_HV_REENLIGHTENMENT "__kvm_hv_reenlightenment" # define VIR_CPU_x86_KVM_HV_TLBFLUSH "__kvm_hv_tlbflush" +# define VIR_CPU_x86_KVM_HV_IPI "__kvm_hv_ipi" # define VIR_CPU_X86_DATA_INIT { 0 } diff --git a/src/
[libvirt] [PATCH v3 3/6] qemu: add support for Hyper-V PV IPIs
QEMU 3.1 supports Hyper-V-style PV IPIs making it cheaper for Windows guests to send an IPI, especially when it targets many CPUs. Reviewed-by: Andrea Bolognani Signed-off-by: Vitaly Kuznetsov --- src/qemu/qemu_command.c | 2 +- src/qemu/qemu_parse_command.c | 2 +- src/qemu/qemu_process.c | 2 +- tests/qemuxml2argvdata/hyperv-off.xml | 1 + tests/qemuxml2argvdata/hyperv.args | 2 +- tests/qemuxml2argvdata/hyperv.xml | 1 + tests/qemuxml2xmloutdata/hyperv-off.xml | 1 + tests/qemuxml2xmloutdata/hyperv.xml | 1 + 8 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b4d3f1ee35..6fc8deff00 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6882,6 +6882,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: +case VIR_DOMAIN_HYPERV_IPI: if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) virBufferAsprintf(, ",hv_%s", virDomainHypervTypeToString(i)); @@ -6899,7 +6900,6 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, def->hyperv_vendor_id); break; -case VIR_DOMAIN_HYPERV_IPI: /* coverity[dead_error_begin] */ case VIR_DOMAIN_HYPERV_LAST: break; diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c index ab418432af..a15f4d1121 100644 --- a/src/qemu/qemu_parse_command.c +++ b/src/qemu/qemu_parse_command.c @@ -1539,6 +1539,7 @@ qemuParseCommandLineCPU(virDomainDefPtr dom, case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: +case VIR_DOMAIN_HYPERV_IPI: if (value) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("HyperV feature '%s' should not " @@ -1579,7 +1580,6 @@ qemuParseCommandLineCPU(virDomainDefPtr dom, break; -case VIR_DOMAIN_HYPERV_IPI: case VIR_DOMAIN_HYPERV_LAST: break; } diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 3291d3f439..85e2f7046b 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3953,12 +3953,12 @@ qemuProcessVerifyHypervFeatures(virDomainDefPtr def, case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: +case VIR_DOMAIN_HYPERV_IPI: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("host doesn't support hyperv '%s' feature"), virDomainHypervTypeToString(i)); return -1; -case VIR_DOMAIN_HYPERV_IPI: /* coverity[dead_error_begin] */ case VIR_DOMAIN_HYPERV_VENDOR_ID: case VIR_DOMAIN_HYPERV_LAST: diff --git a/tests/qemuxml2argvdata/hyperv-off.xml b/tests/qemuxml2argvdata/hyperv-off.xml index dc5777355f..e51cca45b5 100644 --- a/tests/qemuxml2argvdata/hyperv-off.xml +++ b/tests/qemuxml2argvdata/hyperv-off.xml @@ -23,6 +23,7 @@ + diff --git a/tests/qemuxml2argvdata/hyperv.args b/tests/qemuxml2argvdata/hyperv.args index c55204b0c8..0800e4f79d 100644 --- a/tests/qemuxml2argvdata/hyperv.args +++ b/tests/qemuxml2argvdata/hyperv.args @@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ -machine pc,accel=tcg,usb=off,dump-guest-core=off \ -cpu 'qemu32,hv_relaxed,hv_vapic,hv_spinlocks=0x2fff,hv_vpindex,hv_runtime,\ hv_synic,hv_stimer,hv_reset,hv_vendor_id=KVM Hv,hv_frequencies,\ -hv_reenlightenment,hv_tlbflush' \ +hv_reenlightenment,hv_tlbflush,hv_ipi' \ -m 214 \ -smp 6,sockets=6,cores=1,threads=1 \ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ diff --git a/tests/qemuxml2argvdata/hyperv.xml b/tests/qemuxml2argvdata/hyperv.xml index 816adf6907..05c7d478f7 100644 --- a/tests/qemuxml2argvdata/hyperv.xml +++ b/tests/qemuxml2argvdata/hyperv.xml @@ -23,6 +23,7 @@ + diff --git a/tests/qemuxml2xmloutdata/hyperv-off.xml b/tests/qemuxml2xmloutdata/hyperv-off.xml index 77a8dac810..2282b763b5 100644 --- a/tests/qemuxml2xmloutdata/hyperv-off.xml +++ b/tests/qemuxml2xmloutdata/hyperv-off.xml @@ -23,6 +23,7 @@ + diff --git a/tests/qemuxml2xmloutdata/hyperv.xml b/tests/qemuxml2xmloutdata/hyperv.xml index fc8c59a557..97f387c172 100644 --- a/tests/qemuxml2xmloutdata/hyperv.xml +++ b/tests/qemuxml2xmloutdata/hyperv.xml @@ -23,6 +23,7 @@ + -- 2.17.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v3 1/6] docs: remove extra whitespace from Hyper-V enlightenments options
Remove redundant leading whitespaces from " on, off". Suggested-by: Andrea Bolognani Reviewed-by: Andrea Bolognani Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 18 +- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 269741a690..28246deb63 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -2052,7 +2052,7 @@ relaxed Relax constraints on timers - on, off + on, off 1.0.0 (QEMU 2.0) @@ -2070,31 +2070,31 @@ vpindex Virtual processor index - on, off + on, off 1.3.3 (QEMU 2.5) runtime Processor time spent on running guest code and on behalf of guest code - on, off + on, off 1.3.3 (QEMU 2.5) synic Enable Synthetic Interrupt Controller (SyNIC) - on, off + on, off 1.3.3 (QEMU 2.6) stimer Enable SyNIC timers - on, off + on, off 1.3.3 (QEMU 2.6) reset Enable hypervisor reset - on, off + on, off 1.3.3 (QEMU 2.5) @@ -2106,19 +2106,19 @@ frequencies Expose frequency MSRs - on, off + on, off 4.7.0 (QEMU 2.12) reenlightenment Enable re-enlightenment notification on migration - on, off + on, off 4.7.0 (QEMU 3.0) tlbflush Enable PV TLB flush support - on, off + on, off 4.7.0 (QEMU 3.0) -- 2.17.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2 3/5] qemu: add support for Hyper-V PV IPIs
Andrea Bolognani writes: > On Wed, 2018-11-14 at 17:27 +0100, Vitaly Kuznetsov wrote: >> Qemu 3.1 supports Hyper-V-style PV IPIs making it cheaper for Windows > > s/Qemu/QEMU/ > > Better than in v1 but not quite perfect yet ;) > > [...] >> + >> + >> + qemu: Add Hyper-V PV IPI support >> + >> + >> + The QEMU driver now has support for Hyper-V PV IPI enlightenment >> + for Windows guests. >> + >> + > > Okay, not your fault at all, just something that I failed to > communicate properly: updates to the release notes are supposed to > always go in their own commit. The rationale for that is making it > easy for downstreams to cherry-pick the code changes without having > to worry about conflicts in the documentation. > > Additionally, and again I'm at fault for not communicating it > adequately, I kinda expected to have a single entry in the release > notes covering both changes. Does that sound reasonable? > > Since everything else looks good and I'd rather not have you go > through more trouble than you already have, if you're okay with it > I can just drop this hunk from the patch, slap a > > Reviewed-by: Andrea Bolognani > > on it and push it; you can then re-post the release note update > as a separate follow up patch. Let me know if that works for you. No problem at all, I can do v3 fixing stuff like Qemu/QEMU, separate docs/news.xml hunks into their own patch (squashing together as a single ). Thanks for the review! -- Vitaly -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v3 4/6] conf: add support for Hyper-V Enlightened VMCS
Support Hyper-V Enlightened VMCS in domain config. QEMU support will be implemented in the next patch, adding interim VIR_DOMAIN_HYPERV_EVMCS cases to src/qemu/* for now. Reviewed-by: Andrea Bolognani Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 7 +++ docs/schemas/domaincommon.rng | 5 + src/conf/domain_conf.c| 4 src/conf/domain_conf.h| 1 + src/cpu/cpu_x86.c | 3 +++ src/cpu/cpu_x86_data.h| 1 + src/qemu/qemu_command.c | 1 + src/qemu/qemu_parse_command.c | 1 + src/qemu/qemu_process.c | 1 + 9 files changed, 24 insertions(+) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 7592f13a84..1b1518f465 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1982,6 +1982,7 @@ reenlightenment state='on'/ tlbflush state='on'/ ipi state='on'/ +evmcs state='on'/ /hyperv kvm hidden state='on'/ @@ -2128,6 +2129,12 @@ on, off 4.10.0 (QEMU 3.1) + + evmcs + Enable Enlightened VMCS + on, off + 4.10.0 (QEMU 3.1) + pvspinlock diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 26019b3279..ff57ce1015 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5774,6 +5774,11 @@ + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 24876994c5..18d235872f 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -174,6 +174,7 @@ VIR_ENUM_IMPL(virDomainHyperv, VIR_DOMAIN_HYPERV_LAST, "reenlightenment", "tlbflush", "ipi", + "evmcs", ); VIR_ENUM_IMPL(virDomainKVM, VIR_DOMAIN_KVM_LAST, @@ -19993,6 +19994,7 @@ virDomainDefParseXML(xmlDocPtr xml, case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: +case VIR_DOMAIN_HYPERV_EVMCS: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: @@ -22188,6 +22190,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src, case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: +case VIR_DOMAIN_HYPERV_EVMCS: if (src->hyperv_features[i] != dst->hyperv_features[i]) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("State of HyperV enlightenment " @@ -27953,6 +27956,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: +case VIR_DOMAIN_HYPERV_EVMCS: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 9eea75548d..061185e779 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1796,6 +1796,7 @@ typedef enum { VIR_DOMAIN_HYPERV_REENLIGHTENMENT, VIR_DOMAIN_HYPERV_TLBFLUSH, VIR_DOMAIN_HYPERV_IPI, +VIR_DOMAIN_HYPERV_EVMCS, VIR_DOMAIN_HYPERV_LAST } virDomainHyperv; diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 33252e927e..ebfa74fccd 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -116,6 +116,8 @@ KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_TLBFLUSH, 0x4004, 0x0004); KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_IPI, 0x4004, 0x0400); +KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_EVMCS, +0x4004, 0x4000); static virCPUx86Feature x86_kvm_features[] = { @@ -140,6 +142,7 @@ static virCPUx86Feature x86_kvm_features[] = KVM_FEATURE(VIR_CPU_x86_KVM_HV_REENLIGHTENMENT), KVM_FEATURE(VIR_CPU_x86_KVM_HV_TLBFLUSH), KVM_FEATURE(VIR_CPU_x86_KVM_HV_IPI), +KVM_FEATURE(VIR_CPU_x86_KVM_HV_EVMCS), }; typedef struct _virCPUx86Model virCPUx86Model; diff --git a/src/cpu/cpu_x86_data.h b/src/cpu/cpu_x86_data.h index 8c51d88e1a..f52bba821f 100644 --- a/src/cpu/cpu_x86_data.h +++ b/src/cpu/cpu_x86_data.h @@ -66,6 +66,7 @@ struct _virCPUx86CPUID { # define VIR_CPU_x86_KVM_HV_REENLIGHTENMENT "__kvm_hv_reenlightenment" # define VIR_CPU_x86_KVM_HV_TLBFLUSH "__kvm_hv_tlbflush" # define VIR_CPU_x86_KVM_HV_IPI "__kvm_hv_ipi" +# define VIR_CPU_x86_KVM_HV_EVMCS "__kvm_hv_evmcs" # define VIR_CPU_X86_DATA_INIT { 0 } diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 6fc8deff00..27e77f7d66 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6900,6 +6900,7 @@ qemuBui
[libvirt] [PATCH v3 0/6] conf: qemu: support new Hyper-V enlightenments in QEMU 3.1
The upcoming QEMU 3.1 release will bring us two new Hyper-V enlightenments: hv_ipi and hv_evmcs. Support these in libvirt. Changes since v2: - Separate docs/news.xml hunks in their own PATCH6, squash both changes together [Andrea Bolognani] - s/Qemu/QEMU/g + 'whitespate' typo [Andrea Bolognani] Vitaly Kuznetsov (6): docs: remove extra whitespace from Hyper-V enlightenments options conf: add support for Hyper-V PV IPIs qemu: add support for Hyper-V PV IPIs conf: add support for Hyper-V Enlightened VMCS qemu: add support for Hyper-V Enlightened VMCS news: mention Hyper-V PV IPI and Enlightened VMCS support docs/formatdomain.html.in | 32 ++--- docs/news.xml | 9 +++ docs/schemas/domaincommon.rng | 10 src/conf/domain_conf.c | 11 - src/conf/domain_conf.h | 2 ++ src/cpu/cpu_x86.c | 6 + src/cpu/cpu_x86_data.h | 2 ++ src/qemu/qemu_command.c | 2 ++ src/qemu/qemu_parse_command.c | 2 ++ src/qemu/qemu_process.c | 2 ++ tests/qemuxml2argvdata/hyperv-off.xml | 2 ++ tests/qemuxml2argvdata/hyperv.args | 2 +- tests/qemuxml2argvdata/hyperv.xml | 2 ++ tests/qemuxml2xmloutdata/hyperv-off.xml | 2 ++ tests/qemuxml2xmloutdata/hyperv.xml | 2 ++ 15 files changed, 77 insertions(+), 11 deletions(-) -- 2.17.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v2 4/5] conf: add support for Hyper-V Enlightened VMCS
Support Hyper-V Enlightened VMCS in domain config. Qemu support will be implemented in the next patch, adding interim VIR_DOMAIN_HYPERV_EVMCS cases to src/qemu/* for now. Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 7 +++ docs/schemas/domaincommon.rng | 5 + src/conf/domain_conf.c| 4 src/conf/domain_conf.h| 1 + src/cpu/cpu_x86.c | 3 +++ src/cpu/cpu_x86_data.h| 1 + src/qemu/qemu_command.c | 1 + src/qemu/qemu_parse_command.c | 1 + src/qemu/qemu_process.c | 1 + 9 files changed, 24 insertions(+) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 7592f13a84..1b1518f465 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1982,6 +1982,7 @@ reenlightenment state='on'/ tlbflush state='on'/ ipi state='on'/ +evmcs state='on'/ /hyperv kvm hidden state='on'/ @@ -2128,6 +2129,12 @@ on, off 4.10.0 (QEMU 3.1) + + evmcs + Enable Enlightened VMCS + on, off + 4.10.0 (QEMU 3.1) + pvspinlock diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 26019b3279..ff57ce1015 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5774,6 +5774,11 @@ + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 24876994c5..18d235872f 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -174,6 +174,7 @@ VIR_ENUM_IMPL(virDomainHyperv, VIR_DOMAIN_HYPERV_LAST, "reenlightenment", "tlbflush", "ipi", + "evmcs", ); VIR_ENUM_IMPL(virDomainKVM, VIR_DOMAIN_KVM_LAST, @@ -19993,6 +19994,7 @@ virDomainDefParseXML(xmlDocPtr xml, case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: +case VIR_DOMAIN_HYPERV_EVMCS: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: @@ -22188,6 +22190,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src, case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: +case VIR_DOMAIN_HYPERV_EVMCS: if (src->hyperv_features[i] != dst->hyperv_features[i]) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("State of HyperV enlightenment " @@ -27953,6 +27956,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: +case VIR_DOMAIN_HYPERV_EVMCS: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 9eea75548d..061185e779 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1796,6 +1796,7 @@ typedef enum { VIR_DOMAIN_HYPERV_REENLIGHTENMENT, VIR_DOMAIN_HYPERV_TLBFLUSH, VIR_DOMAIN_HYPERV_IPI, +VIR_DOMAIN_HYPERV_EVMCS, VIR_DOMAIN_HYPERV_LAST } virDomainHyperv; diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 33252e927e..ebfa74fccd 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -116,6 +116,8 @@ KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_TLBFLUSH, 0x4004, 0x0004); KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_IPI, 0x4004, 0x0400); +KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_EVMCS, +0x4004, 0x4000); static virCPUx86Feature x86_kvm_features[] = { @@ -140,6 +142,7 @@ static virCPUx86Feature x86_kvm_features[] = KVM_FEATURE(VIR_CPU_x86_KVM_HV_REENLIGHTENMENT), KVM_FEATURE(VIR_CPU_x86_KVM_HV_TLBFLUSH), KVM_FEATURE(VIR_CPU_x86_KVM_HV_IPI), +KVM_FEATURE(VIR_CPU_x86_KVM_HV_EVMCS), }; typedef struct _virCPUx86Model virCPUx86Model; diff --git a/src/cpu/cpu_x86_data.h b/src/cpu/cpu_x86_data.h index 8c51d88e1a..f52bba821f 100644 --- a/src/cpu/cpu_x86_data.h +++ b/src/cpu/cpu_x86_data.h @@ -66,6 +66,7 @@ struct _virCPUx86CPUID { # define VIR_CPU_x86_KVM_HV_REENLIGHTENMENT "__kvm_hv_reenlightenment" # define VIR_CPU_x86_KVM_HV_TLBFLUSH "__kvm_hv_tlbflush" # define VIR_CPU_x86_KVM_HV_IPI "__kvm_hv_ipi" +# define VIR_CPU_x86_KVM_HV_EVMCS "__kvm_hv_evmcs" # define VIR_CPU_X86_DATA_INIT { 0 } diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 6fc8deff00..27e77f7d66 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6900,6 +6900,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
[libvirt] [PATCH v2 5/5] qemu: add support for Hyper-V Enlightened VMCS
Qemu 3.1 supports Hyper-V Enlightened VMCS feature which significantly speeds up nested Hyper-V on KVM environments. Signed-off-by: Vitaly Kuznetsov --- docs/news.xml | 9 + src/qemu/qemu_command.c | 2 +- src/qemu/qemu_parse_command.c | 2 +- src/qemu/qemu_process.c | 2 +- tests/qemuxml2argvdata/hyperv-off.xml | 1 + tests/qemuxml2argvdata/hyperv.args | 2 +- tests/qemuxml2argvdata/hyperv.xml | 1 + tests/qemuxml2xmloutdata/hyperv-off.xml | 1 + tests/qemuxml2xmloutdata/hyperv.xml | 1 + 9 files changed, 17 insertions(+), 4 deletions(-) diff --git a/docs/news.xml b/docs/news.xml index c826380a92..dc10cfe69b 100644 --- a/docs/news.xml +++ b/docs/news.xml @@ -44,6 +44,15 @@ for Windows guests. + + + qemu: Add Hyper-V Enlightened VMCS support + + + The QEMU driver now has support for Hyper-V Enlightened VMCS + enlightenment for Hyper-V guests. + + diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 27e77f7d66..d543ada2a1 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6883,6 +6883,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: +case VIR_DOMAIN_HYPERV_EVMCS: if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) virBufferAsprintf(, ",hv_%s", virDomainHypervTypeToString(i)); @@ -6900,7 +6901,6 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, def->hyperv_vendor_id); break; -case VIR_DOMAIN_HYPERV_EVMCS: /* coverity[dead_error_begin] */ case VIR_DOMAIN_HYPERV_LAST: break; diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c index a1f8369919..d91fc8d901 100644 --- a/src/qemu/qemu_parse_command.c +++ b/src/qemu/qemu_parse_command.c @@ -1540,6 +1540,7 @@ qemuParseCommandLineCPU(virDomainDefPtr dom, case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: +case VIR_DOMAIN_HYPERV_EVMCS: if (value) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("HyperV feature '%s' should not " @@ -1580,7 +1581,6 @@ qemuParseCommandLineCPU(virDomainDefPtr dom, break; -case VIR_DOMAIN_HYPERV_EVMCS: case VIR_DOMAIN_HYPERV_LAST: break; } diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index ed8bcf7f76..ebe8e244ae 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3954,12 +3954,12 @@ qemuProcessVerifyHypervFeatures(virDomainDefPtr def, case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: +case VIR_DOMAIN_HYPERV_EVMCS: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("host doesn't support hyperv '%s' feature"), virDomainHypervTypeToString(i)); return -1; -case VIR_DOMAIN_HYPERV_EVMCS: /* coverity[dead_error_begin] */ case VIR_DOMAIN_HYPERV_VENDOR_ID: case VIR_DOMAIN_HYPERV_LAST: diff --git a/tests/qemuxml2argvdata/hyperv-off.xml b/tests/qemuxml2argvdata/hyperv-off.xml index e51cca45b5..59c1e17ccd 100644 --- a/tests/qemuxml2argvdata/hyperv-off.xml +++ b/tests/qemuxml2argvdata/hyperv-off.xml @@ -24,6 +24,7 @@ + diff --git a/tests/qemuxml2argvdata/hyperv.args b/tests/qemuxml2argvdata/hyperv.args index 0800e4f79d..5d59788e14 100644 --- a/tests/qemuxml2argvdata/hyperv.args +++ b/tests/qemuxml2argvdata/hyperv.args @@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ -machine pc,accel=tcg,usb=off,dump-guest-core=off \ -cpu 'qemu32,hv_relaxed,hv_vapic,hv_spinlocks=0x2fff,hv_vpindex,hv_runtime,\ hv_synic,hv_stimer,hv_reset,hv_vendor_id=KVM Hv,hv_frequencies,\ -hv_reenlightenment,hv_tlbflush,hv_ipi' \ +hv_reenlightenment,hv_tlbflush,hv_ipi,hv_evmcs' \ -m 214 \ -smp 6,sockets=6,cores=1,threads=1 \ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ diff --git a/tests/qemuxml2argvdata/hyperv.xml b/tests/qemuxml2argvdata/hyperv.xml index 05c7d478f7..c6feaed528 100644 --- a/tests/qemuxml2argvdata/hyperv.xml +++ b/tests/qemuxml2argvdata/hyperv.xml @@ -24,6 +24,7 @@ + diff --git a/tests/qemuxml2xmloutdata/hyperv-off.xml b/tests/qemuxml2xmloutdata/hyperv-off.xml index 2282b763b5..1b7d82b14a 100644 --- a/tests/qemuxml2xmloutdata/hyperv-off.xml +++ b/tests/qemuxml2xmlo
[libvirt] [PATCH v2 3/5] qemu: add support for Hyper-V PV IPIs
Qemu 3.1 supports Hyper-V-style PV IPIs making it cheaper for Windows guests to send an IPI, especially when it targets many CPUs. Signed-off-by: Vitaly Kuznetsov --- docs/news.xml | 9 + src/qemu/qemu_command.c | 2 +- src/qemu/qemu_parse_command.c | 2 +- src/qemu/qemu_process.c | 2 +- tests/qemuxml2argvdata/hyperv-off.xml | 1 + tests/qemuxml2argvdata/hyperv.args | 2 +- tests/qemuxml2argvdata/hyperv.xml | 1 + tests/qemuxml2xmloutdata/hyperv-off.xml | 1 + tests/qemuxml2xmloutdata/hyperv.xml | 1 + 9 files changed, 17 insertions(+), 4 deletions(-) diff --git a/docs/news.xml b/docs/news.xml index 88774c55ae..c826380a92 100644 --- a/docs/news.xml +++ b/docs/news.xml @@ -35,6 +35,15 @@ + + + qemu: Add Hyper-V PV IPI support + + + The QEMU driver now has support for Hyper-V PV IPI enlightenment + for Windows guests. + + diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b4d3f1ee35..6fc8deff00 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6882,6 +6882,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: +case VIR_DOMAIN_HYPERV_IPI: if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) virBufferAsprintf(, ",hv_%s", virDomainHypervTypeToString(i)); @@ -6899,7 +6900,6 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, def->hyperv_vendor_id); break; -case VIR_DOMAIN_HYPERV_IPI: /* coverity[dead_error_begin] */ case VIR_DOMAIN_HYPERV_LAST: break; diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c index ab418432af..a15f4d1121 100644 --- a/src/qemu/qemu_parse_command.c +++ b/src/qemu/qemu_parse_command.c @@ -1539,6 +1539,7 @@ qemuParseCommandLineCPU(virDomainDefPtr dom, case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: +case VIR_DOMAIN_HYPERV_IPI: if (value) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("HyperV feature '%s' should not " @@ -1579,7 +1580,6 @@ qemuParseCommandLineCPU(virDomainDefPtr dom, break; -case VIR_DOMAIN_HYPERV_IPI: case VIR_DOMAIN_HYPERV_LAST: break; } diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 3291d3f439..85e2f7046b 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3953,12 +3953,12 @@ qemuProcessVerifyHypervFeatures(virDomainDefPtr def, case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: +case VIR_DOMAIN_HYPERV_IPI: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("host doesn't support hyperv '%s' feature"), virDomainHypervTypeToString(i)); return -1; -case VIR_DOMAIN_HYPERV_IPI: /* coverity[dead_error_begin] */ case VIR_DOMAIN_HYPERV_VENDOR_ID: case VIR_DOMAIN_HYPERV_LAST: diff --git a/tests/qemuxml2argvdata/hyperv-off.xml b/tests/qemuxml2argvdata/hyperv-off.xml index dc5777355f..e51cca45b5 100644 --- a/tests/qemuxml2argvdata/hyperv-off.xml +++ b/tests/qemuxml2argvdata/hyperv-off.xml @@ -23,6 +23,7 @@ + diff --git a/tests/qemuxml2argvdata/hyperv.args b/tests/qemuxml2argvdata/hyperv.args index c55204b0c8..0800e4f79d 100644 --- a/tests/qemuxml2argvdata/hyperv.args +++ b/tests/qemuxml2argvdata/hyperv.args @@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ -machine pc,accel=tcg,usb=off,dump-guest-core=off \ -cpu 'qemu32,hv_relaxed,hv_vapic,hv_spinlocks=0x2fff,hv_vpindex,hv_runtime,\ hv_synic,hv_stimer,hv_reset,hv_vendor_id=KVM Hv,hv_frequencies,\ -hv_reenlightenment,hv_tlbflush' \ +hv_reenlightenment,hv_tlbflush,hv_ipi' \ -m 214 \ -smp 6,sockets=6,cores=1,threads=1 \ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ diff --git a/tests/qemuxml2argvdata/hyperv.xml b/tests/qemuxml2argvdata/hyperv.xml index 816adf6907..05c7d478f7 100644 --- a/tests/qemuxml2argvdata/hyperv.xml +++ b/tests/qemuxml2argvdata/hyperv.xml @@ -23,6 +23,7 @@ + diff --git a/tests/qemuxml2xmloutdata/hyperv-off.xml b/tests/qemuxml2xmloutdata/hyperv-off.xml index 77a8dac810..2282b763b5 100644 --- a/tests/qemuxml2xmloutdata/hyperv-off.xml +++ b/tests/qemuxml2xmlo
[libvirt] [PATCH v2 2/5] conf: add support for Hyper-V PV IPIs
Support Hyper-V PV IPI enlightenment in domain config. Qemu support will be implemented in the next patch, adding interim VIR_DOMAIN_HYPERV_IPI cases to src/qemu/* for now. Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 7 +++ docs/schemas/domaincommon.rng | 5 + src/conf/domain_conf.c| 7 ++- src/conf/domain_conf.h| 1 + src/cpu/cpu_x86.c | 3 +++ src/cpu/cpu_x86_data.h| 1 + src/qemu/qemu_command.c | 1 + src/qemu/qemu_parse_command.c | 1 + src/qemu/qemu_process.c | 1 + 9 files changed, 26 insertions(+), 1 deletion(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 28246deb63..7592f13a84 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1981,6 +1981,7 @@ frequencies state='on'/ reenlightenment state='on'/ tlbflush state='on'/ +ipi state='on'/ /hyperv kvm hidden state='on'/ @@ -2121,6 +2122,12 @@ on, off 4.7.0 (QEMU 3.0) + + ipi + Enable PV IPI support + on, off + 4.10.0 (QEMU 3.1) + pvspinlock diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index b9ac5df479..26019b3279 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5769,6 +5769,11 @@ + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index e8e0adc819..24876994c5 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -172,7 +172,9 @@ VIR_ENUM_IMPL(virDomainHyperv, VIR_DOMAIN_HYPERV_LAST, "vendor_id", "frequencies", "reenlightenment", - "tlbflush") + "tlbflush", + "ipi", +); VIR_ENUM_IMPL(virDomainKVM, VIR_DOMAIN_KVM_LAST, "hidden") @@ -19990,6 +19992,7 @@ virDomainDefParseXML(xmlDocPtr xml, case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: +case VIR_DOMAIN_HYPERV_IPI: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: @@ -22184,6 +22187,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src, case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: +case VIR_DOMAIN_HYPERV_IPI: if (src->hyperv_features[i] != dst->hyperv_features[i]) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("State of HyperV enlightenment " @@ -27948,6 +27952,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: +case VIR_DOMAIN_HYPERV_IPI: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index e30a4b2fe7..9eea75548d 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1795,6 +1795,7 @@ typedef enum { VIR_DOMAIN_HYPERV_FREQUENCIES, VIR_DOMAIN_HYPERV_REENLIGHTENMENT, VIR_DOMAIN_HYPERV_TLBFLUSH, +VIR_DOMAIN_HYPERV_IPI, VIR_DOMAIN_HYPERV_LAST } virDomainHyperv; diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 69a0c8db28..33252e927e 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -114,6 +114,8 @@ KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_REENLIGHTENMENT, 0x4003, 0x2000); KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_TLBFLUSH, 0x4004, 0x0004); +KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_IPI, +0x4004, 0x0400); static virCPUx86Feature x86_kvm_features[] = { @@ -137,6 +139,7 @@ static virCPUx86Feature x86_kvm_features[] = KVM_FEATURE(VIR_CPU_x86_KVM_HV_FREQUENCIES), KVM_FEATURE(VIR_CPU_x86_KVM_HV_REENLIGHTENMENT), KVM_FEATURE(VIR_CPU_x86_KVM_HV_TLBFLUSH), +KVM_FEATURE(VIR_CPU_x86_KVM_HV_IPI), }; typedef struct _virCPUx86Model virCPUx86Model; diff --git a/src/cpu/cpu_x86_data.h b/src/cpu/cpu_x86_data.h index e75b3a2d0d..8c51d88e1a 100644 --- a/src/cpu/cpu_x86_data.h +++ b/src/cpu/cpu_x86_data.h @@ -65,6 +65,7 @@ struct _virCPUx86CPUID { # define VIR_CPU_x86_KVM_HV_FREQUENCIES "__kvm_hv_frequencies" # define VIR_CPU_x86_KVM_HV_REENLIGHTENMENT "__kvm_hv_reenlightenment" # define VIR_CPU_x86_KVM_HV_TLBFLUSH "__kvm_hv_tlbflush" +# define VIR_CPU_x86_KVM_HV_IPI "__kvm_hv_ipi" # define VIR_CPU_X86_DATA_INIT { 0 } diff --git a/src/qemu/qemu_command.c b/src/qemu/qem
[libvirt] [PATCH v2 1/5] docs: remove extra whitespate from Hyper-V enlightenments options
Remove redundant leading whitespaces from " on, off". Suggested-by: Andrea Bolognani Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 18 +- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 269741a690..28246deb63 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -2052,7 +2052,7 @@ relaxed Relax constraints on timers - on, off + on, off 1.0.0 (QEMU 2.0) @@ -2070,31 +2070,31 @@ vpindex Virtual processor index - on, off + on, off 1.3.3 (QEMU 2.5) runtime Processor time spent on running guest code and on behalf of guest code - on, off + on, off 1.3.3 (QEMU 2.5) synic Enable Synthetic Interrupt Controller (SyNIC) - on, off + on, off 1.3.3 (QEMU 2.6) stimer Enable SyNIC timers - on, off + on, off 1.3.3 (QEMU 2.6) reset Enable hypervisor reset - on, off + on, off 1.3.3 (QEMU 2.5) @@ -2106,19 +2106,19 @@ frequencies Expose frequency MSRs - on, off + on, off 4.7.0 (QEMU 2.12) reenlightenment Enable re-enlightenment notification on migration - on, off + on, off 4.7.0 (QEMU 3.0) tlbflush Enable PV TLB flush support - on, off + on, off 4.7.0 (QEMU 3.0) -- 2.17.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v2 0/5] conf: qemu: support new Hyper-V enlightenments in Qemu 3.1
The upcoming Qemu-3.1 release will bring us two new Hyper-V enlightenments: hv_ipi and hv_evmcs. Support these in libvirt. Changes since v1: - Split patches into 'conf' and 'qemu' [John Ferlan] - Add entries to docs/news.xml [Andrea Bolognani] - Add a cleanup PATCH1 removing extra whitespaces from docs/formatdomain.html.in [Andrea Bolognani] - Minor tweaks [Andrea Bolognani] Vitaly Kuznetsov (5): docs: remove extra whitespate from Hyper-V enlightenments options conf: add support for Hyper-V PV IPIs qemu: add support for Hyper-V PV IPIs conf: add support for Hyper-V Enlightened VMCS qemu: add support for Hyper-V Enlightened VMCS docs/formatdomain.html.in | 32 ++--- docs/news.xml | 18 ++ docs/schemas/domaincommon.rng | 10 src/conf/domain_conf.c | 11 - src/conf/domain_conf.h | 2 ++ src/cpu/cpu_x86.c | 6 + src/cpu/cpu_x86_data.h | 2 ++ src/qemu/qemu_command.c | 2 ++ src/qemu/qemu_parse_command.c | 2 ++ src/qemu/qemu_process.c | 2 ++ tests/qemuxml2argvdata/hyperv-off.xml | 2 ++ tests/qemuxml2argvdata/hyperv.args | 2 +- tests/qemuxml2argvdata/hyperv.xml | 2 ++ tests/qemuxml2xmloutdata/hyperv-off.xml | 2 ++ tests/qemuxml2xmloutdata/hyperv.xml | 2 ++ 15 files changed, 86 insertions(+), 11 deletions(-) -- 2.17.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 0/2] conf: qemu: support new Hyper-V enlightenments in Qemu-3.1
John Ferlan writes: > On 11/14/18 4:04 AM, Andrea Bolognani wrote: >> On Tue, 2018-11-13 at 18:53 +0100, Vitaly Kuznetsov wrote: >>> The upcoming Qemu-3.1 release will bring us two new Hyper-V enlightenments: >>> hv_ipi and hv_evmcs. Support these in libvirt. >>> >>> Vitaly Kuznetsov (2): >>> conf: qemu: add support for Hyper-V PV IPIs >>> conf: qemu: add support for Hyper-V Enlightened VMCS >> >> I have pointed out a few very minor issues with the patches, as >> well as a couple areas where pre-existing issues could be fixed, >> although I don't consider the latter a requirement for merging >> the series ;) >> >> One thing that I would like to see, though, is the change being >> documented properly in the release notes (docs/news.xml). Please >> include that and respin. >> > > One other thing that I've really tried to see done is splitting the > "conf" and "qemu" patches. > > That way one deals with conf, docs, conf, util, xml2xmltest, while the > other deals with the qemu specific changes qemu, xml2argv. > > Sometimes it's "harder" to do that - such as may be the case with > various switches when a new case is added; however, in that case the > added case in the conf/docs/etc patch would go with the "default:" or > "last" case and then be moved with the subsequent qemu patch. > I have to admit my overall knowledge of libvirt pretty limited, probably because of that I'm failing to see benefits of doing such split for Qemu/KVM-only features (as the whole Hyper-V emulation is Qemu/KVM-only). How is the first patch going to be tested? Compile-only? Also, which of these patches should src/cpu/* hunks go to? Would realy appreciate some guidance here) Thanks! -- Vitaly -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 1/2] conf: qemu: add support for Hyper-V PV IPIs
Andrea Bolognani writes: ... > >> + 4.10.0 (QEMU 3.1) > > Again pre-existing: what does the first version number refer to? It > would be nice to have it spelled out. > My understanding is that this is libvirt version. We can, of course, spell it out but: $ git grep -c 'class="since"' docs/formatdomain.html.in docs/formatdomain.html.in:400 $ git grep -c 'class="since".*libvirt' docs/formatdomain.html.in docs/formatdomain.html.in:10 Do you want a patch changing the remaining 390 entries? :-) (Thanks for the review btw!) -- Vitaly -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH 1/2] conf: qemu: add support for Hyper-V PV IPIs
Qemu-3.1 supports Hyper-V-style PV IPIs making it cheaper for Windows guests to send an IPI, especially when it targets many CPUs. Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 7 +++ docs/schemas/domaincommon.rng | 5 + src/conf/domain_conf.c | 6 +- src/conf/domain_conf.h | 1 + src/cpu/cpu_x86.c | 3 +++ src/cpu/cpu_x86_data.h | 1 + src/qemu/qemu_command.c | 1 + src/qemu/qemu_parse_command.c | 1 + src/qemu/qemu_process.c | 1 + tests/qemuxml2argvdata/hyperv-off.xml | 1 + tests/qemuxml2argvdata/hyperv.args | 2 +- tests/qemuxml2argvdata/hyperv.xml | 1 + tests/qemuxml2xmloutdata/hyperv-off.xml | 1 + tests/qemuxml2xmloutdata/hyperv.xml | 1 + 14 files changed, 30 insertions(+), 2 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 269741a690..24d4b68d7b 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1981,6 +1981,7 @@ frequencies state='on'/ reenlightenment state='on'/ tlbflush state='on'/ +ipi state='on'/ /hyperv kvm hidden state='on'/ @@ -2121,6 +2122,12 @@ on, off 4.7.0 (QEMU 3.0) + + ipi + Enable PV IPI support + on, off + 4.10.0 (QEMU 3.1) + pvspinlock diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index b9ac5df479..26019b3279 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5769,6 +5769,11 @@ + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index e8e0adc819..c8cde90808 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -172,7 +172,8 @@ VIR_ENUM_IMPL(virDomainHyperv, VIR_DOMAIN_HYPERV_LAST, "vendor_id", "frequencies", "reenlightenment", - "tlbflush") + "tlbflush", + "ipi") VIR_ENUM_IMPL(virDomainKVM, VIR_DOMAIN_KVM_LAST, "hidden") @@ -19990,6 +19991,7 @@ virDomainDefParseXML(xmlDocPtr xml, case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: +case VIR_DOMAIN_HYPERV_IPI: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: @@ -22184,6 +22186,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src, case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: +case VIR_DOMAIN_HYPERV_IPI: if (src->hyperv_features[i] != dst->hyperv_features[i]) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("State of HyperV enlightenment " @@ -27948,6 +27951,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: +case VIR_DOMAIN_HYPERV_IPI: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index e30a4b2fe7..9eea75548d 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1795,6 +1795,7 @@ typedef enum { VIR_DOMAIN_HYPERV_FREQUENCIES, VIR_DOMAIN_HYPERV_REENLIGHTENMENT, VIR_DOMAIN_HYPERV_TLBFLUSH, +VIR_DOMAIN_HYPERV_IPI, VIR_DOMAIN_HYPERV_LAST } virDomainHyperv; diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 69a0c8db28..33252e927e 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -114,6 +114,8 @@ KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_REENLIGHTENMENT, 0x4003, 0x2000); KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_TLBFLUSH, 0x4004, 0x0004); +KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_IPI, +0x4004, 0x0400); static virCPUx86Feature x86_kvm_features[] = { @@ -137,6 +139,7 @@ static virCPUx86Feature x86_kvm_features[] = KVM_FEATURE(VIR_CPU_x86_KVM_HV_FREQUENCIES), KVM_FEATURE(VIR_CPU_x86_KVM_HV_REENLIGHTENMENT), KVM_FEATURE(VIR_CPU_x86_KVM_HV_TLBFLUSH), +KVM_FEATURE(VIR_CPU_x86_KVM_HV_IPI), }; typedef struct _virCPUx86Model virCPUx86Model; diff --git a/src/cpu/cpu_x86_data.h b/src/cpu/cpu_x86_data.h index e75b3a2d0d..8c51d88e1a 100644 --- a/src/cpu/cpu_x86_data.h +++ b/src/cpu/cpu_x86_data.h @@ -65,6 +65,7 @@ struct _virCPUx86CPUID { # define VIR_CPU_x86_KVM_HV_FREQUENCIES "__kvm_hv_frequencies" # define VIR
[libvirt] [PATCH 0/2] conf: qemu: support new Hyper-V enlightenments in Qemu-3.1
The upcoming Qemu-3.1 release will bring us two new Hyper-V enlightenments: hv_ipi and hv_evmcs. Support these in libvirt. Vitaly Kuznetsov (2): conf: qemu: add support for Hyper-V PV IPIs conf: qemu: add support for Hyper-V Enlightened VMCS docs/formatdomain.html.in | 14 ++ docs/schemas/domaincommon.rng | 10 ++ src/conf/domain_conf.c | 10 +- src/conf/domain_conf.h | 2 ++ src/cpu/cpu_x86.c | 6 ++ src/cpu/cpu_x86_data.h | 2 ++ src/qemu/qemu_command.c | 2 ++ src/qemu/qemu_parse_command.c | 2 ++ src/qemu/qemu_process.c | 2 ++ tests/qemuxml2argvdata/hyperv-off.xml | 2 ++ tests/qemuxml2argvdata/hyperv.args | 2 +- tests/qemuxml2argvdata/hyperv.xml | 2 ++ tests/qemuxml2xmloutdata/hyperv-off.xml | 2 ++ tests/qemuxml2xmloutdata/hyperv.xml | 2 ++ 14 files changed, 58 insertions(+), 2 deletions(-) -- 2.17.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH 2/2] conf: qemu: add support for Hyper-V Enlightened VMCS
Qemu-3.1 supports Hyper-V Enlightened VMCS feature which significantly speeds up nested Hyper-V on KVM environments. Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 7 +++ docs/schemas/domaincommon.rng | 5 + src/conf/domain_conf.c | 6 +- src/conf/domain_conf.h | 1 + src/cpu/cpu_x86.c | 3 +++ src/cpu/cpu_x86_data.h | 1 + src/qemu/qemu_command.c | 1 + src/qemu/qemu_parse_command.c | 1 + src/qemu/qemu_process.c | 1 + tests/qemuxml2argvdata/hyperv-off.xml | 1 + tests/qemuxml2argvdata/hyperv.args | 2 +- tests/qemuxml2argvdata/hyperv.xml | 1 + tests/qemuxml2xmloutdata/hyperv-off.xml | 1 + tests/qemuxml2xmloutdata/hyperv.xml | 1 + 14 files changed, 30 insertions(+), 2 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 24d4b68d7b..ad58f3f1c7 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1982,6 +1982,7 @@ reenlightenment state='on'/ tlbflush state='on'/ ipi state='on'/ +evmcs state='on'/ /hyperv kvm hidden state='on'/ @@ -2128,6 +2129,12 @@ on, off 4.10.0 (QEMU 3.1) + + evmcs + Enable Enlightened VMCS + on, off + 4.10.0 (QEMU 3.1) + pvspinlock diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 26019b3279..ff57ce1015 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5774,6 +5774,11 @@ + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index c8cde90808..b0bb162d46 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -173,7 +173,8 @@ VIR_ENUM_IMPL(virDomainHyperv, VIR_DOMAIN_HYPERV_LAST, "frequencies", "reenlightenment", "tlbflush", - "ipi") + "ipi", + "evmcs") VIR_ENUM_IMPL(virDomainKVM, VIR_DOMAIN_KVM_LAST, "hidden") @@ -19992,6 +19993,7 @@ virDomainDefParseXML(xmlDocPtr xml, case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: +case VIR_DOMAIN_HYPERV_EVMCS: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: @@ -22187,6 +22189,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src, case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: +case VIR_DOMAIN_HYPERV_EVMCS: if (src->hyperv_features[i] != dst->hyperv_features[i]) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("State of HyperV enlightenment " @@ -27952,6 +27955,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: +case VIR_DOMAIN_HYPERV_EVMCS: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 9eea75548d..061185e779 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1796,6 +1796,7 @@ typedef enum { VIR_DOMAIN_HYPERV_REENLIGHTENMENT, VIR_DOMAIN_HYPERV_TLBFLUSH, VIR_DOMAIN_HYPERV_IPI, +VIR_DOMAIN_HYPERV_EVMCS, VIR_DOMAIN_HYPERV_LAST } virDomainHyperv; diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 33252e927e..ebfa74fccd 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -116,6 +116,8 @@ KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_TLBFLUSH, 0x4004, 0x0004); KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_IPI, 0x4004, 0x0400); +KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_EVMCS, +0x4004, 0x4000); static virCPUx86Feature x86_kvm_features[] = { @@ -140,6 +142,7 @@ static virCPUx86Feature x86_kvm_features[] = KVM_FEATURE(VIR_CPU_x86_KVM_HV_REENLIGHTENMENT), KVM_FEATURE(VIR_CPU_x86_KVM_HV_TLBFLUSH), KVM_FEATURE(VIR_CPU_x86_KVM_HV_IPI), +KVM_FEATURE(VIR_CPU_x86_KVM_HV_EVMCS), }; typedef struct _virCPUx86Model virCPUx86Model; diff --git a/src/cpu/cpu_x86_data.h b/src/cpu/cpu_x86_data.h index 8c51d88e1a..f52bba821f 100644 --- a/src/cpu/cpu_x86_data.h +++ b/src/cpu/cpu_x86_data.h @@ -66,6 +66,7 @@ struct _virCPUx86CPUID { # define VIR_CPU_x86_KVM_HV_REENLIGHTENMENT "__kvm_hv_reenlightenment" # define VIR_CPU_x86_KVM_HV_TLBFLUSH "__kvm_hv_tlbflush" #
[libvirt] [PATCH 1/3] conf: qemu: add support for Hyper-V frequency MSRs
Qemu-2.12 gained 'hv-frequencies' cpu flag to enable Hyper-V frequency MSRs. These MSRs are required (but not sufficient) to make Hyper-V on KVM pass stable TSC page clocksource to L2 guests. Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 7 +++ docs/schemas/domaincommon.rng | 5 + src/conf/domain_conf.c | 6 +- src/conf/domain_conf.h | 1 + src/cpu/cpu_x86.c | 3 +++ src/cpu/cpu_x86_data.h | 1 + src/qemu/qemu_command.c | 1 + src/qemu/qemu_parse_command.c | 1 + src/qemu/qemu_process.c | 1 + tests/qemuxml2argvdata/hyperv-off.xml | 1 + tests/qemuxml2argvdata/hyperv.args | 2 +- tests/qemuxml2argvdata/hyperv.xml | 1 + tests/qemuxml2xmloutdata/hyperv-off.xml | 1 + tests/qemuxml2xmloutdata/hyperv.xml | 1 + 14 files changed, 30 insertions(+), 2 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 34664f7903..4ec2b73244 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1937,6 +1937,7 @@ synic state='on'/ reset state='on'/ vendor_id state='on' value='KVM Hv'/ +frequencies state='on'/ /hyperv kvm hidden state='on'/ @@ -2059,6 +2060,12 @@ on, off; value - string, up to 12 characters 1.3.3 (QEMU 2.5) + + frequencies + Expose frequency MSRs + on, off + 4.7.0 (QEMU 2.12) + pvspinlock diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 1a786968cc..fc013ff2a4 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5716,6 +5716,11 @@ + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 8fd774b531..17a9bc8286 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -169,7 +169,8 @@ VIR_ENUM_IMPL(virDomainHyperv, VIR_DOMAIN_HYPERV_LAST, "synic", "stimer", "reset", - "vendor_id") + "vendor_id", + "frequencies") VIR_ENUM_IMPL(virDomainKVM, VIR_DOMAIN_KVM_LAST, "hidden") @@ -20017,6 +20018,7 @@ virDomainDefParseXML(xmlDocPtr xml, case VIR_DOMAIN_HYPERV_SYNIC: case VIR_DOMAIN_HYPERV_STIMER: case VIR_DOMAIN_HYPERV_RESET: +case VIR_DOMAIN_HYPERV_FREQUENCIES: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: @@ -22201,6 +22203,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src, case VIR_DOMAIN_HYPERV_SYNIC: case VIR_DOMAIN_HYPERV_STIMER: case VIR_DOMAIN_HYPERV_RESET: +case VIR_DOMAIN_HYPERV_FREQUENCIES: if (src->hyperv_features[i] != dst->hyperv_features[i]) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("State of HyperV enlightenment " @@ -27851,6 +27854,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, case VIR_DOMAIN_HYPERV_SYNIC: case VIR_DOMAIN_HYPERV_STIMER: case VIR_DOMAIN_HYPERV_RESET: +case VIR_DOMAIN_HYPERV_FREQUENCIES: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index c1dfa37fdf..8b15b7e192 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1791,6 +1791,7 @@ typedef enum { VIR_DOMAIN_HYPERV_STIMER, VIR_DOMAIN_HYPERV_RESET, VIR_DOMAIN_HYPERV_VENDOR_ID, +VIR_DOMAIN_HYPERV_FREQUENCIES, VIR_DOMAIN_HYPERV_LAST } virDomainHyperv; diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 809da94117..a2fbfb577d 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -109,6 +109,8 @@ KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_VPINDEX, 0x4003, 0x0040); KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_RESET, 0x4003, 0x0080); +KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_FREQUENCIES, +0x4003, 0x0800); static virCPUx86Feature x86_kvm_features[] = { @@ -129,6 +131,7 @@ static virCPUx86Feature x86_kvm_features[] = KVM_FEATURE(VIR_CPU_x86_KVM_HV_VAPIC), KVM_FEATURE(VIR_CPU_x86_KVM_HV_VPINDEX), KVM_FEATURE(VIR_CPU_x86_KVM_HV_RESET), +KVM_FEATURE(VIR_CPU_x86_KVM_HV_FREQUENCIES), }; typedef struct _virCPUx86Model virCPUx86Model; diff --git a/src/cpu/cpu_x86_data.h b/src/cpu/cpu_x86_data.h index b89110f16c..c01eb41be5 100644 --- a/src/cpu/cpu_x86_data.h +++ b/src/cpu/cpu_x86_data.h @@ -63,6 +63,7 @@ struct _virCPUx86CPUID { # define VIR_CPU_x86_KVM_HV_VAPIC
[libvirt] [PATCH 2/3] conf: qemu: add support for Hyper-V reenlightenment notifications
Qemu-3.0 supports so-called 'Reenlightenment' notifications and this (in conjunction with 'hv-frequencies') can be used make Hyper-V on KVM pass stable TSC page clocksource to L2 guests. Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 7 +++ docs/schemas/domaincommon.rng | 5 + src/conf/domain_conf.c | 6 +- src/conf/domain_conf.h | 1 + src/cpu/cpu_x86.c | 3 +++ src/cpu/cpu_x86_data.h | 1 + src/qemu/qemu_command.c | 1 + src/qemu/qemu_parse_command.c | 1 + src/qemu/qemu_process.c | 1 + tests/qemuxml2argvdata/hyperv-off.xml | 1 + tests/qemuxml2argvdata/hyperv.args | 3 ++- tests/qemuxml2argvdata/hyperv.xml | 1 + tests/qemuxml2xmloutdata/hyperv-off.xml | 1 + tests/qemuxml2xmloutdata/hyperv.xml | 1 + 14 files changed, 31 insertions(+), 2 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 4ec2b73244..de0993696e 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1938,6 +1938,7 @@ reset state='on'/ vendor_id state='on' value='KVM Hv'/ frequencies state='on'/ +reenlightenment state='on'/ /hyperv kvm hidden state='on'/ @@ -2066,6 +2067,12 @@ on, off 4.7.0 (QEMU 2.12) + + reenlightenment + Enable re-enlightenment notification on migration + on, off + 4.7.0 (QEMU 3.0) + pvspinlock diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index fc013ff2a4..b2a1ebfa3f 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5721,6 +5721,11 @@ + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 17a9bc8286..e2154b5bf7 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -170,7 +170,8 @@ VIR_ENUM_IMPL(virDomainHyperv, VIR_DOMAIN_HYPERV_LAST, "stimer", "reset", "vendor_id", - "frequencies") + "frequencies", + "reenlightenment") VIR_ENUM_IMPL(virDomainKVM, VIR_DOMAIN_KVM_LAST, "hidden") @@ -20019,6 +20020,7 @@ virDomainDefParseXML(xmlDocPtr xml, case VIR_DOMAIN_HYPERV_STIMER: case VIR_DOMAIN_HYPERV_RESET: case VIR_DOMAIN_HYPERV_FREQUENCIES: +case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: @@ -22204,6 +22206,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src, case VIR_DOMAIN_HYPERV_STIMER: case VIR_DOMAIN_HYPERV_RESET: case VIR_DOMAIN_HYPERV_FREQUENCIES: +case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: if (src->hyperv_features[i] != dst->hyperv_features[i]) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("State of HyperV enlightenment " @@ -27855,6 +27858,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, case VIR_DOMAIN_HYPERV_STIMER: case VIR_DOMAIN_HYPERV_RESET: case VIR_DOMAIN_HYPERV_FREQUENCIES: +case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 8b15b7e192..8fa5002985 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1792,6 +1792,7 @@ typedef enum { VIR_DOMAIN_HYPERV_RESET, VIR_DOMAIN_HYPERV_VENDOR_ID, VIR_DOMAIN_HYPERV_FREQUENCIES, +VIR_DOMAIN_HYPERV_REENLIGHTENMENT, VIR_DOMAIN_HYPERV_LAST } virDomainHyperv; diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index a2fbfb577d..7a48b78eb9 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -111,6 +111,8 @@ KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_RESET, 0x4003, 0x0080); KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_FREQUENCIES, 0x4003, 0x0800); +KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_REENLIGHTENMENT, +0x4003, 0x2000); static virCPUx86Feature x86_kvm_features[] = { @@ -132,6 +134,7 @@ static virCPUx86Feature x86_kvm_features[] = KVM_FEATURE(VIR_CPU_x86_KVM_HV_VPINDEX), KVM_FEATURE(VIR_CPU_x86_KVM_HV_RESET), KVM_FEATURE(VIR_CPU_x86_KVM_HV_FREQUENCIES), +KVM_FEATURE(VIR_CPU_x86_KVM_HV_REENLIGHTENMENT), }; typedef struct _virCPUx86Model virCPUx86Model; diff --git a/src/cpu/cpu_x86_data.h b/src/cpu/cpu_x86_data.h index c01eb41be5..a810c64fc9 100644 --- a/src/cpu/cpu_x86_data.h +++ b/src/cpu/cpu_x86_data.h @@ -64,6 +64,
[libvirt] [PATCH 3/3] conf: qemu: add support for Hyper-V PV TLB flush
Qemu-3.0 supports Hyper-V-style PV TLB flush, Windows guests can benefit from this feature as KVM knows which vCPUs are not currently scheduled (and thus don't require any immediate action). Signed-off-by: Vitaly Kuznetsov --- docs/formatdomain.html.in | 7 +++ docs/schemas/domaincommon.rng | 5 + src/conf/domain_conf.c | 6 +- src/conf/domain_conf.h | 1 + src/cpu/cpu_x86.c | 3 +++ src/cpu/cpu_x86_data.h | 1 + src/qemu/qemu_command.c | 1 + src/qemu/qemu_parse_command.c | 1 + src/qemu/qemu_process.c | 1 + tests/qemuxml2argvdata/hyperv-off.xml | 1 + tests/qemuxml2argvdata/hyperv.args | 2 +- tests/qemuxml2argvdata/hyperv.xml | 1 + tests/qemuxml2xmloutdata/hyperv-off.xml | 1 + tests/qemuxml2xmloutdata/hyperv.xml | 1 + 14 files changed, 30 insertions(+), 2 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index de0993696e..c37a4389dc 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1939,6 +1939,7 @@ vendor_id state='on' value='KVM Hv'/ frequencies state='on'/ reenlightenment state='on'/ +tlbflush state='on'/ /hyperv kvm hidden state='on'/ @@ -2073,6 +2074,12 @@ on, off 4.7.0 (QEMU 3.0) + + tlbflush + Enable PV TLB flush support + on, off + 4.7.0 (QEMU 3.0) + pvspinlock diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index b2a1ebfa3f..eab2618e51 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5726,6 +5726,11 @@ + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index e2154b5bf7..f32bbd760c 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -171,7 +171,8 @@ VIR_ENUM_IMPL(virDomainHyperv, VIR_DOMAIN_HYPERV_LAST, "reset", "vendor_id", "frequencies", - "reenlightenment") + "reenlightenment", + "tlbflush") VIR_ENUM_IMPL(virDomainKVM, VIR_DOMAIN_KVM_LAST, "hidden") @@ -20021,6 +20022,7 @@ virDomainDefParseXML(xmlDocPtr xml, case VIR_DOMAIN_HYPERV_RESET: case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: +case VIR_DOMAIN_HYPERV_TLBFLUSH: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: @@ -22207,6 +22209,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src, case VIR_DOMAIN_HYPERV_RESET: case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: +case VIR_DOMAIN_HYPERV_TLBFLUSH: if (src->hyperv_features[i] != dst->hyperv_features[i]) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("State of HyperV enlightenment " @@ -27859,6 +27862,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, case VIR_DOMAIN_HYPERV_RESET: case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: +case VIR_DOMAIN_HYPERV_TLBFLUSH: break; case VIR_DOMAIN_HYPERV_SPINLOCKS: diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 8fa5002985..1287e862fc 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1793,6 +1793,7 @@ typedef enum { VIR_DOMAIN_HYPERV_VENDOR_ID, VIR_DOMAIN_HYPERV_FREQUENCIES, VIR_DOMAIN_HYPERV_REENLIGHTENMENT, +VIR_DOMAIN_HYPERV_TLBFLUSH, VIR_DOMAIN_HYPERV_LAST } virDomainHyperv; diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 7a48b78eb9..7fa84f6014 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -113,6 +113,8 @@ KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_FREQUENCIES, 0x4003, 0x0800); KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_REENLIGHTENMENT, 0x4003, 0x2000); +KVM_FEATURE_DEF(VIR_CPU_x86_KVM_HV_TLBFLUSH, +0x4004, 0x0004); static virCPUx86Feature x86_kvm_features[] = { @@ -135,6 +137,7 @@ static virCPUx86Feature x86_kvm_features[] = KVM_FEATURE(VIR_CPU_x86_KVM_HV_RESET), KVM_FEATURE(VIR_CPU_x86_KVM_HV_FREQUENCIES), KVM_FEATURE(VIR_CPU_x86_KVM_HV_REENLIGHTENMENT), +KVM_FEATURE(VIR_CPU_x86_KVM_HV_TLBFLUSH), }; typedef struct _virCPUx86Model virCPUx86Model; diff --git a/src/cpu/cpu_x86_data.h b/src/cpu/cpu_x86_data.h index a810c64fc9..090a21156f 100644 --- a/src/cpu/cpu_x86_data.h +++ b/src/cpu/cpu_x86_data.h @@ -65,6 +65,7 @@ stru
[libvirt] [PATCH 0/3] conf: qemu: support new Hyper-V enlightenments
Several new Hyper-V enlightenments were recently added to Qemu: - hv-frequencies - hv-reenlightenment - hv-tlbflush Support these in libvirt. Vitaly Kuznetsov (3): conf: qemu: add support for Hyper-V frequency MSRs conf: qemu: add support for Hyper-V reenlightenment notifications conf: qemu: add support for Hyper-V PV TLB flush docs/formatdomain.html.in | 21 + docs/schemas/domaincommon.rng | 15 +++ src/conf/domain_conf.c | 14 +- src/conf/domain_conf.h | 3 +++ src/cpu/cpu_x86.c | 9 + src/cpu/cpu_x86_data.h | 3 +++ src/qemu/qemu_command.c | 3 +++ src/qemu/qemu_parse_command.c | 3 +++ src/qemu/qemu_process.c | 3 +++ tests/qemuxml2argvdata/hyperv-off.xml | 3 +++ tests/qemuxml2argvdata/hyperv.args | 3 ++- tests/qemuxml2argvdata/hyperv.xml | 3 +++ tests/qemuxml2xmloutdata/hyperv-off.xml | 3 +++ tests/qemuxml2xmloutdata/hyperv.xml | 3 +++ 14 files changed, 87 insertions(+), 2 deletions(-) -- 2.14.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 1/2] conf: add crash to hyperv features
"Denis V. Lunev"writes: > On 11/10/2015 06:55 PM, Dmitry Andreev wrote: >> Paolo, Jiri, can I do something more for this patch to be accepted? >> >> On 05.11.2015 17:32, Paolo Bonzini wrote: >>> >>> On 05/11/2015 14:54, Dmitry Andreev wrote: >> Add crash CPU feature for Hyper-V. Hyper-V crash MSR's can be used >> by Hyper-V based guests to notify about occurred guest crash. >> >> XML: >> >> >> >> >> > Sounds like this is related to an existing panic device we already > support. So what does enabling hv_crash do in QEMU? Is it an > additional > channel to a panic device or is the panic device still needed even if > hv_crash is enabled? In any case, I think we should map this > somehow to > the panic device instead of copying 1:1 the way QEMU enables hv_crash. pvpanic and Hyper-V crash are independent ways for guest to notify about OS crash. Both ways rise the 'qemu guest panicked' event. Domain can have both hv_crash and pvpanic enabled at the same time. pvpanic is in section in domain configuration because it is an ISA device. Hyper-V crash is a hypervisor's feature, which enables a set of model-specific registers. Guest can use this registers to send notification and store additional information about a crash. This is a part of Microsoft hypervisor interface. That's why I think hv_crash should be in section. >>> I agree. >>> >>> Paolo >> > Please. > > This feature is very interesting for us for guest debugging > especially during guest installation where specific drivers > are not available or not ready or not that easy to supply. +1 while I think it would make more sense to propagate crash information (HV_X64_MSR_CRASH_P0..P4 MSR) all the way up to libvirt (and even further to libvirt users) instead of just triggering 'guest panic', enabling the feature for Windows guests looks like a good starting point. -- Vitaly -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list