Pablo Greco 40546a
From b3f714b0907ff1a906d8725efb26733caa913b01 Mon Sep 17 00:00:00 2001
Pablo Greco 40546a
Message-Id: <b3f714b0907ff1a906d8725efb26733caa913b01@dist-git>
Pablo Greco 40546a
From: Jiri Denemark <jdenemar@redhat.com>
Pablo Greco 40546a
Date: Fri, 21 Jun 2019 09:25:47 +0200
Pablo Greco 40546a
Subject: [PATCH] qemu_command: Use consistent syntax for CPU 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
Normal CPU features use modern -cpu ...,feature=on|off syntax when
Pablo Greco 40546a
available, but kvm features kept using the old +feature or -feature.
Pablo Greco 40546a
Pablo Greco 40546a
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Pablo Greco 40546a
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Pablo Greco 40546a
(cherry picked from commit e1ba4073961091522b1560472c5559124bd3c034)
Pablo Greco 40546a
Pablo Greco 40546a
https://bugzilla.redhat.com/show_bug.cgi?id=1697627
Pablo Greco 40546a
Pablo Greco 40546a
Conflicts:
Pablo Greco 40546a
	tests/qemuxml2argvdata/eoi-disabled.x86_64-latest.args
Pablo Greco 40546a
	tests/qemuxml2argvdata/eoi-enabled.x86_64-latest.args
Pablo Greco 40546a
	tests/qemuxml2argvdata/kvmclock+eoi-disabled.x86_64-latest.args
Pablo Greco 40546a
	tests/qemuxml2argvdata/pv-spinlock-disabled.x86_64-latest.args
Pablo Greco 40546a
	tests/qemuxml2argvdata/pv-spinlock-enabled.x86_64-latest.args
Pablo Greco 40546a
            - not backported
Pablo Greco 40546a
Pablo Greco 40546a
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Pablo Greco 40546a
Message-Id: <da608f8dcef1eeb3e62d4c1d921c8182c1b4d533.1561068591.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 | 46 +++++++++++++++++++----------------------
Pablo Greco 40546a
 1 file changed, 21 insertions(+), 25 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 7ffc4358e3..bea9a208e5 100644
Pablo Greco 40546a
--- a/src/qemu/qemu_command.c
Pablo Greco 40546a
+++ b/src/qemu/qemu_command.c
Pablo Greco 40546a
@@ -6813,6 +6813,19 @@ qemuBuildGlobalControllerCommandLine(virCommandPtr cmd,
Pablo Greco 40546a
 }
Pablo Greco 40546a
 
Pablo Greco 40546a
 
Pablo Greco 40546a
+static void
Pablo Greco 40546a
+qemuBuildCpuFeature(virQEMUCapsPtr qemuCaps,
Pablo Greco 40546a
+                    virBufferPtr buf,
Pablo Greco 40546a
+                    const char *name,
Pablo Greco 40546a
+                    bool state)
Pablo Greco 40546a
+{
Pablo Greco 40546a
+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION))
Pablo Greco 40546a
+        virBufferAsprintf(buf, ",%s=%s", name, state ? "on" : "off");
Pablo Greco 40546a
+    else
Pablo Greco 40546a
+        virBufferAsprintf(buf, ",%c%s", state ? '+' : '-', name);
Pablo Greco 40546a
+}
Pablo Greco 40546a
+
Pablo Greco 40546a
+
Pablo Greco 40546a
 static int
Pablo Greco 40546a
 qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
Pablo Greco 40546a
                         const virDomainDef *def,
Pablo Greco 40546a
@@ -6890,18 +6903,12 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
Pablo Greco 40546a
         switch ((virCPUFeaturePolicy) cpu->features[i].policy) {
Pablo Greco 40546a
         case VIR_CPU_FEATURE_FORCE:
Pablo Greco 40546a
         case VIR_CPU_FEATURE_REQUIRE:
Pablo Greco 40546a
-            if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION))
Pablo Greco 40546a
-                virBufferAsprintf(buf, ",%s=on", cpu->features[i].name);
Pablo Greco 40546a
-            else
Pablo Greco 40546a
-                virBufferAsprintf(buf, ",+%s", cpu->features[i].name);
Pablo Greco 40546a
+            qemuBuildCpuFeature(qemuCaps, buf, cpu->features[i].name, true);
Pablo Greco 40546a
             break;
Pablo Greco 40546a
 
Pablo Greco 40546a
         case VIR_CPU_FEATURE_DISABLE:
Pablo Greco 40546a
         case VIR_CPU_FEATURE_FORBID:
Pablo Greco 40546a
-            if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION))
Pablo Greco 40546a
-                virBufferAsprintf(buf, ",%s=off", cpu->features[i].name);
Pablo Greco 40546a
-            else
Pablo Greco 40546a
-                virBufferAsprintf(buf, ",-%s", cpu->features[i].name);
Pablo Greco 40546a
+            qemuBuildCpuFeature(qemuCaps, buf, cpu->features[i].name, false);
Pablo Greco 40546a
             break;
Pablo Greco 40546a
 
Pablo Greco 40546a
         case VIR_CPU_FEATURE_OPTIONAL:
Pablo Greco 40546a
@@ -6982,8 +6989,8 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
Pablo Greco 40546a
 
Pablo Greco 40546a
         if (timer->name == VIR_DOMAIN_TIMER_NAME_KVMCLOCK &&
Pablo Greco 40546a
             timer->present != -1) {
Pablo Greco 40546a
-            virBufferAsprintf(&buf, ",%ckvmclock",
Pablo Greco 40546a
-                              timer->present ? '+' : '-');
Pablo Greco 40546a
+            qemuBuildCpuFeature(qemuCaps, &buf, "kvmclock",
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
@@ -6994,24 +7001,13 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
Pablo Greco 40546a
     }
Pablo Greco 40546a
 
Pablo Greco 40546a
     if (def->apic_eoi) {
Pablo Greco 40546a
-        char sign;
Pablo Greco 40546a
-        if (def->apic_eoi == VIR_TRISTATE_SWITCH_ON)
Pablo Greco 40546a
-            sign = '+';
Pablo Greco 40546a
-        else
Pablo Greco 40546a
-            sign = '-';
Pablo Greco 40546a
-
Pablo Greco 40546a
-        virBufferAsprintf(&buf, ",%ckvm_pv_eoi", sign);
Pablo Greco 40546a
+        qemuBuildCpuFeature(qemuCaps, &buf, "kvm_pv_eoi",
Pablo Greco 40546a
+                            def->apic_eoi == VIR_TRISTATE_SWITCH_ON);
Pablo Greco 40546a
     }
Pablo Greco 40546a
 
Pablo Greco 40546a
     if (def->features[VIR_DOMAIN_FEATURE_PVSPINLOCK]) {
Pablo Greco 40546a
-        char sign;
Pablo Greco 40546a
-        if (def->features[VIR_DOMAIN_FEATURE_PVSPINLOCK] ==
Pablo Greco 40546a
-            VIR_TRISTATE_SWITCH_ON)
Pablo Greco 40546a
-            sign = '+';
Pablo Greco 40546a
-        else
Pablo Greco 40546a
-            sign = '-';
Pablo Greco 40546a
-
Pablo Greco 40546a
-        virBufferAsprintf(&buf, ",%ckvm_pv_unhalt", sign);
Pablo Greco 40546a
+        qemuBuildCpuFeature(qemuCaps, &buf, "kvm_pv_unhalt",
Pablo Greco 40546a
+                            def->features[VIR_DOMAIN_FEATURE_PVSPINLOCK] == VIR_TRISTATE_SWITCH_ON);
Pablo Greco 40546a
     }
Pablo Greco 40546a
 
Pablo Greco 40546a
     if (def->features[VIR_DOMAIN_FEATURE_HYPERV] == VIR_TRISTATE_SWITCH_ON) {
Pablo Greco 40546a
-- 
Pablo Greco 40546a
2.22.0
Pablo Greco 40546a