138 lines
5.8 KiB
Diff
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
|
|
|