Re: [libvirt] [PATCH v4 0/4] Add support for Direct Mode for Hyper-V Synthetic timers

2019-08-16 Thread Vitaly Kuznetsov
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

2019-08-09 Thread Vitaly Kuznetsov
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

2019-08-09 Thread Vitaly Kuznetsov
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

2019-08-09 Thread Vitaly Kuznetsov
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

2019-08-09 Thread Vitaly Kuznetsov
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

2019-08-09 Thread Vitaly Kuznetsov
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

2019-08-09 Thread Vitaly Kuznetsov
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

2019-08-09 Thread Vitaly Kuznetsov
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()

2019-08-05 Thread Vitaly Kuznetsov
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

2019-08-05 Thread Vitaly Kuznetsov
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

2019-08-05 Thread Vitaly Kuznetsov
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

2019-08-05 Thread Vitaly Kuznetsov
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

2019-08-05 Thread Vitaly Kuznetsov
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

2019-08-05 Thread Vitaly Kuznetsov
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

2019-07-30 Thread Vitaly Kuznetsov
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

2019-07-30 Thread Vitaly Kuznetsov
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

2019-07-30 Thread Vitaly Kuznetsov
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

2019-07-30 Thread Vitaly Kuznetsov
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

2019-07-30 Thread Vitaly Kuznetsov
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

2019-07-30 Thread Vitaly Kuznetsov
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()

2019-07-30 Thread Vitaly Kuznetsov
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

2019-07-30 Thread Vitaly Kuznetsov
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

2019-07-30 Thread Vitaly Kuznetsov
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

2019-07-29 Thread Vitaly Kuznetsov
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

2019-07-29 Thread Vitaly Kuznetsov
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

2019-07-25 Thread Vitaly Kuznetsov
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

2019-07-25 Thread Vitaly Kuznetsov
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

2019-07-25 Thread Vitaly Kuznetsov
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

2019-07-25 Thread Vitaly Kuznetsov
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

2019-07-25 Thread Vitaly Kuznetsov
'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

2019-07-25 Thread Vitaly Kuznetsov
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

2019-07-25 Thread Vitaly Kuznetsov
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+

2019-07-25 Thread Vitaly Kuznetsov
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+

2019-07-25 Thread Vitaly Kuznetsov
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+

2019-07-24 Thread Vitaly Kuznetsov
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

2018-11-14 Thread Vitaly Kuznetsov
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

2018-11-14 Thread Vitaly Kuznetsov
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

2018-11-14 Thread Vitaly Kuznetsov
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

2018-11-14 Thread Vitaly Kuznetsov
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

2018-11-14 Thread Vitaly Kuznetsov
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

2018-11-14 Thread Vitaly Kuznetsov
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

2018-11-14 Thread Vitaly Kuznetsov
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

2018-11-14 Thread Vitaly Kuznetsov
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

2018-11-14 Thread Vitaly Kuznetsov
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

2018-11-14 Thread Vitaly Kuznetsov
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

2018-11-14 Thread Vitaly Kuznetsov
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

2018-11-14 Thread Vitaly Kuznetsov
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

2018-11-14 Thread Vitaly Kuznetsov
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

2018-11-14 Thread Vitaly Kuznetsov
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

2018-11-14 Thread Vitaly Kuznetsov
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

2018-11-14 Thread Vitaly Kuznetsov
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

2018-11-13 Thread Vitaly Kuznetsov
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

2018-11-13 Thread Vitaly Kuznetsov
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

2018-11-13 Thread Vitaly Kuznetsov
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

2018-08-09 Thread Vitaly Kuznetsov
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

2018-08-09 Thread Vitaly Kuznetsov
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

2018-08-09 Thread Vitaly Kuznetsov
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

2018-08-09 Thread Vitaly Kuznetsov
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

2015-11-10 Thread Vitaly Kuznetsov
"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