libvirt/SOURCES/libvirt-qemu_command-Use-ca...

138 lines
5.8 KiB
Diff

From 243a37dbf1a42f75a2529b954dac40bb0dd4059e Mon Sep 17 00:00:00 2001
Message-Id: <243a37dbf1a42f75a2529b954dac40bb0dd4059e@dist-git>
From: Jiri Denemark <jdenemar@redhat.com>
Date: Fri, 21 Jun 2019 09:25:55 +0200
Subject: [PATCH] qemu_command: Use canonical names of CPU features
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
When building QEMU command line, we should use the preferred spelling of
each CPU feature without relying on compatibility aliases (which may be
removed at some point).
The "unavailable-features" CPU property is used as a witness for the
correct names of the features in our translation table.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
(cherry picked from commit 5030a7450b0f0117a7903303572c6bda6c012327)
https://bugzilla.redhat.com/show_bug.cgi?id=1697627
Conflicts:
src/qemu/qemu_capabilities.c
- several refactors are missing
tests/qemuxml2argvdata/eoi-disabled.x86_64-latest.args
tests/qemuxml2argvdata/eoi-enabled.x86_64-latest.args
tests/qemuxml2argvdata/kvmclock+eoi-disabled.x86_64-latest.args
tests/qemuxml2argvdata/pv-spinlock-disabled.x86_64-latest.args
tests/qemuxml2argvdata/pv-spinlock-enabled.x86_64-latest.args
- these were not backported
tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args
- downstream patch to add rtm=on and hle=on for Haswell
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Message-Id: <5d34d0b9087230e4dc0f0936b34e73b5f1781832.1561068591.git.jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
---
src/qemu/qemu_capabilities.c | 8 +++++++-
src/qemu/qemu_capabilities.h | 1 +
src/qemu/qemu_command.c | 2 ++
tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml | 1 +
tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args | 6 +++---
5 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index fb260eae96..c48d66b39b 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -516,6 +516,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
"machine.pseries.cap-nested-hv",
"x86-max-cpu",
"cpu-unavailable-features",
+ "canonical-cpu-features",
);
@@ -2799,7 +2800,9 @@ virQEMUCapsCPUFeatureTranslate(virQEMUCapsPtr qemuCaps,
if (ARCH_IS_X86(qemuCaps->arch))
table = virQEMUCapsCPUFeaturesX86;
- if (!table || !feature)
+ if (!table ||
+ !feature ||
+ !virQEMUCapsGet(qemuCaps, QEMU_CAPS_CANONICAL_CPU_FEATURES))
return feature;
for (entry = table; entry->libvirt; entry++) {
@@ -4381,6 +4384,9 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps,
virQEMUCapsClear(qemuCaps, QEMU_CAPS_DEVICE_VFIO_CCW);
}
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_UNAVAILABLE_FEATURES))
+ virQEMUCapsSet(qemuCaps, QEMU_CAPS_CANONICAL_CPU_FEATURES);
+
/* Probe for SEV capabilities */
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SEV_GUEST)) {
int rc = virQEMUCapsProbeQMPSEVCapabilities(qemuCaps, mon);
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index 5aa41efdb0..1767b2ab6c 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -496,6 +496,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV, /* -machine pseries.cap-nested-hv */
QEMU_CAPS_X86_MAX_CPU, /* max-x86_64-cpu type exists */
QEMU_CAPS_CPU_UNAVAILABLE_FEATURES, /* "unavailable-features" CPU property */
+ QEMU_CAPS_CANONICAL_CPU_FEATURES, /* avoid CPU feature aliases */
QEMU_CAPS_LAST /* this must always be the last item */
} virQEMUCapsFlags;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index bea9a208e5..b5c0588e3c 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -6819,6 +6819,8 @@ qemuBuildCpuFeature(virQEMUCapsPtr qemuCaps,
const char *name,
bool state)
{
+ name = virQEMUCapsCPUFeatureToQEMU(qemuCaps, name);
+
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION))
virBufferAsprintf(buf, ",%s=%s", name, state ? "on" : "off");
else
diff --git a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
index 95d26dfce8..9245641df8 100644
--- a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
@@ -216,6 +216,7 @@
<flag name='vfio-pci.display'/>
<flag name='x86-max-cpu'/>
<flag name='cpu-unavailable-features'/>
+ <flag name='canonical-cpu-features'/>
<version>4000050</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>473743</microcodeVersion>
diff --git a/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args
index 898b987086..6bc88bbe86 100644
--- a/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args
+++ b/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args
@@ -10,9 +10,9 @@ QEMU_AUDIO_DRV=none \
-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 Haswell,pclmuldq=on,ds_cpl=on,tsc_adjust=on,fxsr_opt=on,lahf_lm=on,\
-cmp_legacy=on,nodeid_msr=on,perfctr_core=on,perfctr_nb=on,rtm=on,hle=on,\
-kvm_pv_eoi=on,kvm_pv_unhalt=on \
+-cpu Haswell,pclmulqdq=on,ds-cpl=on,tsc-adjust=on,fxsr-opt=on,lahf-lm=on,\
+cmp-legacy=on,nodeid-msr=on,perfctr-core=on,perfctr-nb=on,rtm=on,hle=on,\
+kvm-pv-eoi=on,kvm-pv-unhalt=on \
-m 214 \
-realtime mlock=off \
-smp 1,sockets=1,cores=1,threads=1 \
--
2.22.0