Pablo Greco 40546a
From 3338d2ca3f36c9f9546cbcd436c344c8a3c97285 Mon Sep 17 00:00:00 2001
Pablo Greco 40546a
Message-Id: <3338d2ca3f36c9f9546cbcd436c344c8a3c97285@dist-git>
Pablo Greco 40546a
From: Jiri Denemark <jdenemar@redhat.com>
Pablo Greco 40546a
Date: Fri, 7 Feb 2020 10:41:42 +0100
Pablo Greco 40546a
Subject: [PATCH] qemu: Prefer dashes for hyperv features
Pablo Greco 40546a
MIME-Version: 1.0
Pablo Greco 40546a
Content-Type: text/plain; charset=UTF-8
Pablo Greco 40546a
Content-Transfer-Encoding: 8bit
Pablo Greco 40546a
Pablo Greco 40546a
Starting with QEMU 4.1, we're using the canonical feature names on the
Pablo Greco 40546a
command line and avoid aliases to prepare for possible deprecation of
Pablo Greco 40546a
all aliases in QEMU. But we do so only for features from our CPU map,
Pablo Greco 40546a
hyperv features defined in the code were unchanged and this patch fixes
Pablo Greco 40546a
it. Some features use "hv-" prefix unconditionally because they were
Pablo Greco 40546a
introduced recently enough to always support spelling with a dash.
Pablo Greco 40546a
Pablo Greco 40546a
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Pablo Greco 40546a
Tested-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Pablo Greco 40546a
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Pablo Greco 40546a
(cherry picked from commit d99e8f01c7f9b5a0f384ccaac40187091a4e6c6c)
Pablo Greco 40546a
Pablo Greco 40546a
https://bugzilla.redhat.com/show_bug.cgi?id=1794868
Pablo Greco 40546a
Pablo Greco 40546a
Conflicts:
Pablo Greco 40546a
	tests/qemuxml2argvdata/hyperv.args
Pablo Greco 40546a
            - a few extra hyperv features upstream
Pablo Greco 40546a
Pablo Greco 40546a
Since "unavailable-features" QOM property was backported to QEMU 2.12,
Pablo Greco 40546a
we would effectively start using "hv-" prefix (instead of "hv_") for all
Pablo Greco 40546a
hyperv features. This is fine because the downstream version of QEMU
Pablo Greco 40546a
with "unavailable-features" backported defines all supported hyperv
Pablo Greco 40546a
features with dashes.
Pablo Greco 40546a
Pablo Greco 40546a
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Pablo Greco 40546a
Message-Id: <57ee0267b028177420edeae0edcf479de3f52820.1581064395.git.jdenemar@redhat.com>
Pablo Greco 40546a
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Pablo Greco 40546a
---
Pablo Greco 40546a
 src/qemu/qemu_command.c                         | 17 ++++++++++++-----
Pablo Greco 40546a
 .../clock-timer-hyperv-rtc.args                 |  2 +-
Pablo Greco 40546a
 tests/qemuxml2argvdata/hyperv-panic.args        |  2 +-
Pablo Greco 40546a
 tests/qemuxml2argvdata/hyperv.args              |  4 ++--
Pablo Greco 40546a
 tests/qemuxml2argvdata/panic-double.args        |  2 +-
Pablo Greco 40546a
 5 files changed, 17 insertions(+), 10 deletions(-)
Pablo Greco 40546a
Pablo Greco 40546a
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
Pablo Greco 40546a
index 2b885e98dd..0289a907a1 100644
Pablo Greco 40546a
--- a/src/qemu/qemu_command.c
Pablo Greco 40546a
+++ b/src/qemu/qemu_command.c
Pablo Greco 40546a
@@ -6995,7 +6995,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
Pablo Greco 40546a
                                 !!timer->present);
Pablo Greco 40546a
         } else if (timer->name == VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK &&
Pablo Greco 40546a
                    timer->present == 1) {
Pablo Greco 40546a
-            virBufferAddLit(&buf, ",hv_time");
Pablo Greco 40546a
+            virBufferAddLit(&buf, ",hv-time");
Pablo Greco 40546a
         } else if (timer->name == VIR_DOMAIN_TIMER_NAME_TSC &&
Pablo Greco 40546a
                    timer->frequency > 0) {
Pablo Greco 40546a
             virBufferAsprintf(&buf, ",tsc-frequency=%lu", timer->frequency);
Pablo Greco 40546a
@@ -7013,6 +7013,11 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
Pablo Greco 40546a
     }
Pablo Greco 40546a
 
Pablo Greco 40546a
     if (def->features[VIR_DOMAIN_FEATURE_HYPERV] == VIR_TRISTATE_SWITCH_ON) {
Pablo Greco 40546a
+        const char *hvPrefix = "hv-";
Pablo Greco 40546a
+
Pablo Greco 40546a
+        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CANONICAL_CPU_FEATURES))
Pablo Greco 40546a
+            hvPrefix = "hv_";
Pablo Greco 40546a
+
Pablo Greco 40546a
         for (i = 0; i < VIR_DOMAIN_HYPERV_LAST; i++) {
Pablo Greco 40546a
             switch ((virDomainHyperv) i) {
Pablo Greco 40546a
             case VIR_DOMAIN_HYPERV_RELAXED:
Pablo Greco 40546a
@@ -7026,19 +7031,21 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
Pablo Greco 40546a
             case VIR_DOMAIN_HYPERV_REENLIGHTENMENT:
Pablo Greco 40546a
             case VIR_DOMAIN_HYPERV_TLBFLUSH:
Pablo Greco 40546a
                 if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON)
Pablo Greco 40546a
-                    virBufferAsprintf(&buf, ",hv_%s",
Pablo Greco 40546a
+                    virBufferAsprintf(&buf, ",%s%s",
Pablo Greco 40546a
+                                      hvPrefix,
Pablo Greco 40546a
                                       virDomainHypervTypeToString(i));
Pablo Greco 40546a
                 break;
Pablo Greco 40546a
 
Pablo Greco 40546a
             case VIR_DOMAIN_HYPERV_SPINLOCKS:
Pablo Greco 40546a
                 if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON)
Pablo Greco 40546a
-                    virBufferAsprintf(&buf, ",hv_spinlocks=0x%x",
Pablo Greco 40546a
+                    virBufferAsprintf(&buf, ",%s=0x%x",
Pablo Greco 40546a
+                                      VIR_CPU_x86_KVM_HV_SPINLOCKS,
Pablo Greco 40546a
                                       def->hyperv_spinlocks);
Pablo Greco 40546a
                 break;
Pablo Greco 40546a
 
Pablo Greco 40546a
             case VIR_DOMAIN_HYPERV_VENDOR_ID:
Pablo Greco 40546a
                 if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON)
Pablo Greco 40546a
-                    virBufferAsprintf(&buf, ",hv_vendor_id=%s",
Pablo Greco 40546a
+                    virBufferAsprintf(&buf, ",hv-vendor-id=%s",
Pablo Greco 40546a
                                       def->hyperv_vendor_id);
Pablo Greco 40546a
                 break;
Pablo Greco 40546a
 
Pablo Greco 40546a
@@ -7051,7 +7058,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
Pablo Greco 40546a
 
Pablo Greco 40546a
     for (i = 0; i < def->npanics; i++) {
Pablo Greco 40546a
         if (def->panics[i]->model == VIR_DOMAIN_PANIC_MODEL_HYPERV) {
Pablo Greco 40546a
-            virBufferAddLit(&buf, ",hv_crash");
Pablo Greco 40546a
+            virBufferAddLit(&buf, ",hv-crash");
Pablo Greco 40546a
             break;
Pablo Greco 40546a
         }
Pablo Greco 40546a
     }
Pablo Greco 40546a
diff --git a/tests/qemuxml2argvdata/clock-timer-hyperv-rtc.args b/tests/qemuxml2argvdata/clock-timer-hyperv-rtc.args
Pablo Greco 40546a
index 6045fbdbf2..1e36d139f9 100644
Pablo Greco 40546a
--- a/tests/qemuxml2argvdata/clock-timer-hyperv-rtc.args
Pablo Greco 40546a
+++ b/tests/qemuxml2argvdata/clock-timer-hyperv-rtc.args
Pablo Greco 40546a
@@ -8,7 +8,7 @@ QEMU_AUDIO_DRV=none \
Pablo Greco 40546a
 -name QEMUGuest1 \
Pablo Greco 40546a
 -S \
Pablo Greco 40546a
 -machine pc,accel=kvm,usb=off,dump-guest-core=off \
Pablo Greco 40546a
--cpu qemu32,hv_time \
Pablo Greco 40546a
+-cpu qemu32,hv-time \
Pablo Greco 40546a
 -m 214 \
Pablo Greco 40546a
 -smp 6,sockets=6,cores=1,threads=1 \
Pablo Greco 40546a
 -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
Pablo Greco 40546a
diff --git a/tests/qemuxml2argvdata/hyperv-panic.args b/tests/qemuxml2argvdata/hyperv-panic.args
Pablo Greco 40546a
index fca46d7371..627fb09502 100644
Pablo Greco 40546a
--- a/tests/qemuxml2argvdata/hyperv-panic.args
Pablo Greco 40546a
+++ b/tests/qemuxml2argvdata/hyperv-panic.args
Pablo Greco 40546a
@@ -8,7 +8,7 @@ QEMU_AUDIO_DRV=none \
Pablo Greco 40546a
 -name QEMUGuest1 \
Pablo Greco 40546a
 -S \
Pablo Greco 40546a
 -machine pc,accel=tcg,usb=off,dump-guest-core=off \
Pablo Greco 40546a
--cpu qemu32,hv_crash \
Pablo Greco 40546a
+-cpu qemu32,hv-crash \
Pablo Greco 40546a
 -m 214 \
Pablo Greco 40546a
 -smp 6,sockets=6,cores=1,threads=1 \
Pablo Greco 40546a
 -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
Pablo Greco 40546a
diff --git a/tests/qemuxml2argvdata/hyperv.args b/tests/qemuxml2argvdata/hyperv.args
Pablo Greco 40546a
index 6ee6198fb0..a5fc6a1121 100644
Pablo Greco 40546a
--- a/tests/qemuxml2argvdata/hyperv.args
Pablo Greco 40546a
+++ b/tests/qemuxml2argvdata/hyperv.args
Pablo Greco 40546a
@@ -8,8 +8,8 @@ QEMU_AUDIO_DRV=none \
Pablo Greco 40546a
 -name QEMUGuest1 \
Pablo Greco 40546a
 -S \
Pablo Greco 40546a
 -machine pc,accel=tcg,usb=off,dump-guest-core=off \
Pablo Greco 40546a
--cpu 'qemu32,hv_relaxed,hv_vapic,hv_spinlocks=0x2fff,hv_vpindex,hv_runtime,\
Pablo Greco 40546a
-hv_synic,hv_stimer,hv_reset,hv_vendor_id=KVM Hv,hv_frequencies,\
Pablo Greco 40546a
+-cpu 'qemu32,hv_relaxed,hv_vapic,hv-spinlocks=0x2fff,hv_vpindex,hv_runtime,\
Pablo Greco 40546a
+hv_synic,hv_stimer,hv_reset,hv-vendor-id=KVM Hv,hv_frequencies,\
Pablo Greco 40546a
 hv_reenlightenment,hv_tlbflush' \
Pablo Greco 40546a
 -m 214 \
Pablo Greco 40546a
 -smp 6,sockets=6,cores=1,threads=1 \
Pablo Greco 40546a
diff --git a/tests/qemuxml2argvdata/panic-double.args b/tests/qemuxml2argvdata/panic-double.args
Pablo Greco 40546a
index 7acee1ae29..8a632477b1 100644
Pablo Greco 40546a
--- a/tests/qemuxml2argvdata/panic-double.args
Pablo Greco 40546a
+++ b/tests/qemuxml2argvdata/panic-double.args
Pablo Greco 40546a
@@ -8,7 +8,7 @@ QEMU_AUDIO_DRV=none \
Pablo Greco 40546a
 -name QEMUGuest1 \
Pablo Greco 40546a
 -S \
Pablo Greco 40546a
 -machine pc,accel=tcg,usb=off,dump-guest-core=off \
Pablo Greco 40546a
--cpu qemu32,hv_crash \
Pablo Greco 40546a
+-cpu qemu32,hv-crash \
Pablo Greco 40546a
 -m 214 \
Pablo Greco 40546a
 -smp 6,sockets=6,cores=1,threads=1 \
Pablo Greco 40546a
 -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
Pablo Greco 40546a
-- 
Pablo Greco 40546a
2.25.0
Pablo Greco 40546a