Qemu dropped cpu features for osxsave and ospke [1][2].
The reason for the instant removal is that those features were never
configurable as discussed in [3].
Fortunately the use cases adding those flags in the past are rare, but
they exist. One that I identified are e.g. older virt-install when used
with --cpu=host-model and there always could be the case of a user
adding it to the guest xml.
This triggers an issue like:
qemu-system-x86_64: can't apply global Broadwell-noTSX-x86_64-
cpu.osxsave=on: Property '.osxsave' not found
Ensure that this does no more break spawning newer qemu versions by
not rendering those features into the qemu command line.
Fixes: https://bugs.launchpad.net/fedora/+source/qemu/+bug/1825195
Resolves: https://bugzilla.redhat.com/1644848
[1]: https://git.qemu.org/?p=qemu.git;a=commit;h=f1a2352
[2]: https://git.qemu.org/?p=qemu.git;a=commit;h=9ccb978
[3]: https://www.mail-archive.com/qemu-devel@nongnu.org/msg561877.html
Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
---
src/qemu/qemu_command.c | 23 +++++++++++++++++++
.../qemuxml2argvdata/cpu-host-model-cmt.args | 2 +-
tests/qemuxml2argvdata/cpu-tsc-frequency.args | 4 ++--
3 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 1425d97b1e..e0c8ae50a1 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -7076,6 +7076,27 @@ qemuBuildGlobalControllerCommandLine(virCommandPtr cmd,
return 0;
}
+/**
+ * qemuFeatureNoEffect:
+ * @feature: CPU Feature
+ *
+ * Returns true, if the feature is known to have (never had) an effect on QEMU.
+ * Those features might be dropped in qemu without a longer deprecation cycle
+ * and must therefore be known e.g. to no more define them on command line.
+ */
+static bool
+qemuFeatureNoEffect(virCPUFeatureDefPtr feature)
+{
+ if (!feature->name)
+ return false;
+
+ if (STREQ(feature->name, "osxsave"))
+ return true;
+ if (STREQ(feature->name, "ospke"))
+ return true;
+
+ return false;
+}
static int
qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
@@ -7144,6 +7165,8 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
virBufferAsprintf(buf, ",vendor=%s", cpu->vendor_id);
for (i = 0; i < cpu->nfeatures; i++) {
+ if (qemuFeatureNoEffect(&(cpu->features[i])))
+ continue;
switch ((virCPUFeaturePolicy) cpu->features[i].policy) {
case VIR_CPU_FEATURE_FORCE:
case VIR_CPU_FEATURE_REQUIRE:
diff --git a/tests/qemuxml2argvdata/cpu-host-model-cmt.args b/tests/qemuxml2argvdata/cpu-host-model-cmt.args
index 36f706b836..42f969fd62 100644
--- a/tests/qemuxml2argvdata/cpu-host-model-cmt.args
+++ b/tests/qemuxml2argvdata/cpu-host-model-cmt.args
@@ -12,7 +12,7 @@ QEMU_AUDIO_DRV=none \
-S \
-machine pc,accel=tcg,usb=off,dump-guest-core=off \
-cpu Haswell,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+dtes64,+monitor,+ds_cpl,+vmx,\
-+smx,+est,+tm2,+xtpr,+pdcm,+osxsave,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm \
++smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm \
-m 214 \
-realtime mlock=off \
-smp 6,sockets=6,cores=1,threads=1 \
diff --git a/tests/qemuxml2argvdata/cpu-tsc-frequency.args b/tests/qemuxml2argvdata/cpu-tsc-frequency.args
index 55bcf89617..55b72b4404 100644
--- a/tests/qemuxml2argvdata/cpu-tsc-frequency.args
+++ b/tests/qemuxml2argvdata/cpu-tsc-frequency.args
@@ -12,8 +12,8 @@ QEMU_AUDIO_DRV=none \
-S \
-machine pc,accel=kvm,usb=off,dump-guest-core=off \
-cpu Haswell,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+dtes64,+monitor,+ds_cpl,+vmx,\
-+smx,+est,+tm2,+xtpr,+pdcm,+osxsave,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,\
-+invtsc,tsc-frequency=3504000000 \
++smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,+invtsc,\
+tsc-frequency=3504000000 \
-m 214 \
-realtime mlock=off \
-smp 1,sockets=1,cores=1,threads=1 \
--
2.17.1
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On 4/25/19 9:50 AM, Christian Ehrhardt wrote: > Qemu dropped cpu features for osxsave and ospke [1][2]. > The reason for the instant removal is that those features were never > configurable as discussed in [3]. > > Fortunately the use cases adding those flags in the past are rare, but > they exist. One that I identified are e.g. older virt-install when used > with --cpu=host-model and there always could be the case of a user > adding it to the guest xml. > > This triggers an issue like: > qemu-system-x86_64: can't apply global Broadwell-noTSX-x86_64- > cpu.osxsave=on: Property '.osxsave' not found > > Ensure that this does no more break spawning newer qemu versions by > not rendering those features into the qemu command line. > > Fixes: https://bugs.launchpad.net/fedora/+source/qemu/+bug/1825195 > Resolves: https://bugzilla.redhat.com/1644848 I am not sure if I understood why this is the solution you opted for. I'll start a discussion in the cover-letter, which seems more suitable. As far as this patch goes: Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com> > > [1]: https://git.qemu.org/?p=qemu.git;a=commit;h=f1a2352 > [2]: https://git.qemu.org/?p=qemu.git;a=commit;h=9ccb978 > [3]: https://www.mail-archive.com/qemu-devel@nongnu.org/msg561877.html > > Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com> > --- > src/qemu/qemu_command.c | 23 +++++++++++++++++++ > .../qemuxml2argvdata/cpu-host-model-cmt.args | 2 +- > tests/qemuxml2argvdata/cpu-tsc-frequency.args | 4 ++-- > 3 files changed, 26 insertions(+), 3 deletions(-) > > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > index 1425d97b1e..e0c8ae50a1 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c > @@ -7076,6 +7076,27 @@ qemuBuildGlobalControllerCommandLine(virCommandPtr cmd, > return 0; > } > > +/** > + * qemuFeatureNoEffect: > + * @feature: CPU Feature > + * > + * Returns true, if the feature is known to have (never had) an effect on QEMU. > + * Those features might be dropped in qemu without a longer deprecation cycle > + * and must therefore be known e.g. to no more define them on command line. > + */ > +static bool > +qemuFeatureNoEffect(virCPUFeatureDefPtr feature) > +{ > + if (!feature->name) > + return false; > + > + if (STREQ(feature->name, "osxsave")) > + return true; > + if (STREQ(feature->name, "ospke")) > + return true; > + > + return false; > +} > > static int > qemuBuildCpuModelArgStr(virQEMUDriverPtr driver, > @@ -7144,6 +7165,8 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver, > virBufferAsprintf(buf, ",vendor=%s", cpu->vendor_id); > > for (i = 0; i < cpu->nfeatures; i++) { > + if (qemuFeatureNoEffect(&(cpu->features[i]))) > + continue; > switch ((virCPUFeaturePolicy) cpu->features[i].policy) { > case VIR_CPU_FEATURE_FORCE: > case VIR_CPU_FEATURE_REQUIRE: > diff --git a/tests/qemuxml2argvdata/cpu-host-model-cmt.args b/tests/qemuxml2argvdata/cpu-host-model-cmt.args > index 36f706b836..42f969fd62 100644 > --- a/tests/qemuxml2argvdata/cpu-host-model-cmt.args > +++ b/tests/qemuxml2argvdata/cpu-host-model-cmt.args > @@ -12,7 +12,7 @@ QEMU_AUDIO_DRV=none \ > -S \ > -machine pc,accel=tcg,usb=off,dump-guest-core=off \ > -cpu Haswell,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+dtes64,+monitor,+ds_cpl,+vmx,\ > -+smx,+est,+tm2,+xtpr,+pdcm,+osxsave,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm \ > ++smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm \ > -m 214 \ > -realtime mlock=off \ > -smp 6,sockets=6,cores=1,threads=1 \ > diff --git a/tests/qemuxml2argvdata/cpu-tsc-frequency.args b/tests/qemuxml2argvdata/cpu-tsc-frequency.args > index 55bcf89617..55b72b4404 100644 > --- a/tests/qemuxml2argvdata/cpu-tsc-frequency.args > +++ b/tests/qemuxml2argvdata/cpu-tsc-frequency.args > @@ -12,8 +12,8 @@ QEMU_AUDIO_DRV=none \ > -S \ > -machine pc,accel=kvm,usb=off,dump-guest-core=off \ > -cpu Haswell,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+dtes64,+monitor,+ds_cpl,+vmx,\ > -+smx,+est,+tm2,+xtpr,+pdcm,+osxsave,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,\ > -+invtsc,tsc-frequency=3504000000 \ > ++smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,+invtsc,\ > +tsc-frequency=3504000000 \ > -m 214 \ > -realtime mlock=off \ > -smp 1,sockets=1,cores=1,threads=1 \ -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
© 2016 - 2024 Red Hat, Inc.