|
|
aa5bf2 |
From fa6027e1ad6ead4c4b6a13f1f5359b63fec2e23c Mon Sep 17 00:00:00 2001
|
|
|
aa5bf2 |
Message-Id: <fa6027e1ad6ead4c4b6a13f1f5359b63fec2e23c@dist-git>
|
|
|
d76c62 |
From: Jiri Denemark <jdenemar@redhat.com>
|
|
|
d76c62 |
Date: Fri, 27 Mar 2015 12:48:40 +0100
|
|
|
d76c62 |
Subject: [PATCH] RHEL: Hack around changed Broadwell/Haswell CPUs
|
|
|
d76c62 |
|
|
|
d76c62 |
RHEL-only
|
|
|
d76c62 |
|
|
|
d76c62 |
Upstream tried to solve the change of Broadwell and Haswell CPUs by
|
|
|
d76c62 |
removing rtm and hle features from the corresponding CPU models for new
|
|
|
d76c62 |
machine types. Then they reverted this and introduced new *-noTSX models
|
|
|
d76c62 |
instead. However, the original fix was backported to RHEL.
|
|
|
d76c62 |
|
|
|
d76c62 |
This patch makes sure Broadwell and Haswell will always contain rtm and
|
|
|
d76c62 |
hle features regardless on RHEL version or machine type used.
|
|
|
d76c62 |
|
|
|
d76c62 |
https://bugzilla.redhat.com/show_bug.cgi?id=1199446
|
|
|
d76c62 |
|
|
|
d76c62 |
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
|
d76c62 |
---
|
|
|
d76c62 |
src/qemu/qemu_command.c | 21 +++++++++++++++++++
|
|
|
d76c62 |
tests/qemuxml2argvdata/cpu-Haswell.args | 2 +-
|
|
|
d76c62 |
.../qemuxml2argvdata/cpu-host-model-cmt.args | 2 +-
|
|
|
9de337 |
.../cpu-translation.x86_64-4.0.0.args | 2 +-
|
|
|
9de337 |
.../cpu-translation.x86_64-latest.args | 2 +-
|
|
|
9de337 |
tests/qemuxml2argvdata/cpu-tsc-frequency.args | 2 +-
|
|
|
d76c62 |
tests/qemuxml2argvdata/q35-acpi-nouefi.args | 2 +-
|
|
|
d76c62 |
tests/qemuxml2argvdata/q35-acpi-uefi.args | 2 +-
|
|
|
d76c62 |
tests/qemuxml2argvdata/q35-noacpi-nouefi.args | 2 +-
|
|
|
9de337 |
9 files changed, 29 insertions(+), 8 deletions(-)
|
|
|
d76c62 |
|
|
|
d76c62 |
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
|
|
aa5bf2 |
index 48df8818a6..a1072f74cf 100644
|
|
|
d76c62 |
--- a/src/qemu/qemu_command.c
|
|
|
d76c62 |
+++ b/src/qemu/qemu_command.c
|
|
|
aa5bf2 |
@@ -6242,6 +6242,8 @@ qemuBuildCpuModelArgStr(virQEMUDriver *driver,
|
|
|
d76c62 |
{
|
|
|
d76c62 |
size_t i;
|
|
|
9de337 |
virCPUDef *cpu = def->cpu;
|
|
|
d76c62 |
+ bool hle = false;
|
|
|
d76c62 |
+ bool rtm = false;
|
|
|
d76c62 |
|
|
|
d76c62 |
switch ((virCPUMode) cpu->mode) {
|
|
|
d76c62 |
case VIR_CPU_MODE_HOST_PASSTHROUGH:
|
|
|
aa5bf2 |
@@ -6306,6 +6308,11 @@ qemuBuildCpuModelArgStr(virQEMUDriver *driver,
|
|
|
d76c62 |
virBufferAsprintf(buf, ",vendor=%s", cpu->vendor_id);
|
|
|
d76c62 |
|
|
|
d76c62 |
for (i = 0; i < cpu->nfeatures; i++) {
|
|
|
d76c62 |
+ if (STREQ("rtm", cpu->features[i].name))
|
|
|
d76c62 |
+ rtm = true;
|
|
|
d76c62 |
+ if (STREQ("hle", cpu->features[i].name))
|
|
|
d76c62 |
+ hle = true;
|
|
|
d76c62 |
+
|
|
|
d76c62 |
switch ((virCPUFeaturePolicy) cpu->features[i].policy) {
|
|
|
d76c62 |
case VIR_CPU_FEATURE_FORCE:
|
|
|
d76c62 |
case VIR_CPU_FEATURE_REQUIRE:
|
|
|
aa5bf2 |
@@ -6323,6 +6330,20 @@ qemuBuildCpuModelArgStr(virQEMUDriver *driver,
|
|
|
d76c62 |
}
|
|
|
d76c62 |
}
|
|
|
d76c62 |
|
|
|
d76c62 |
+ /* Some versions of qemu-kvm in RHEL provide Broadwell and Haswell CPU
|
|
|
d76c62 |
+ * models which lack rtm and hle features when used with some machine
|
|
|
d76c62 |
+ * types. Let's make sure Broadwell and Haswell will always have these
|
|
|
d76c62 |
+ * features. But only if the features were not explicitly mentioned in
|
|
|
d76c62 |
+ * the guest CPU definition.
|
|
|
d76c62 |
+ */
|
|
|
d76c62 |
+ if (STREQ_NULLABLE(cpu->model, "Broadwell") ||
|
|
|
d76c62 |
+ STREQ_NULLABLE(cpu->model, "Haswell")) {
|
|
|
d76c62 |
+ if (!rtm)
|
|
|
d76c62 |
+ qemuBuildCpuFeature(qemuCaps, buf, "rtm", true);
|
|
|
d76c62 |
+ if (!hle)
|
|
|
d76c62 |
+ qemuBuildCpuFeature(qemuCaps, buf, "hle", true);
|
|
|
d76c62 |
+ }
|
|
|
d76c62 |
+
|
|
|
d76c62 |
return 0;
|
|
|
d76c62 |
}
|
|
|
d76c62 |
|
|
|
d76c62 |
diff --git a/tests/qemuxml2argvdata/cpu-Haswell.args b/tests/qemuxml2argvdata/cpu-Haswell.args
|
|
|
aa5bf2 |
index 6441a4c1eb..110017cf0e 100644
|
|
|
d76c62 |
--- a/tests/qemuxml2argvdata/cpu-Haswell.args
|
|
|
d76c62 |
+++ b/tests/qemuxml2argvdata/cpu-Haswell.args
|
|
|
aa5bf2 |
@@ -12,7 +12,7 @@ QEMU_AUDIO_DRV=none \
|
|
|
d76c62 |
-S \
|
|
|
aa5bf2 |
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
|
|
d76c62 |
-machine pc,accel=kvm,usb=off,dump-guest-core=off \
|
|
|
d76c62 |
--cpu Haswell \
|
|
|
d76c62 |
+-cpu Haswell,+rtm,+hle \
|
|
|
d76c62 |
-m 214 \
|
|
|
d76c62 |
-realtime mlock=off \
|
|
|
d76c62 |
-smp 6,sockets=6,cores=1,threads=1 \
|
|
|
d76c62 |
diff --git a/tests/qemuxml2argvdata/cpu-host-model-cmt.args b/tests/qemuxml2argvdata/cpu-host-model-cmt.args
|
|
|
aa5bf2 |
index ffa9236a47..c859978e02 100644
|
|
|
d76c62 |
--- a/tests/qemuxml2argvdata/cpu-host-model-cmt.args
|
|
|
d76c62 |
+++ b/tests/qemuxml2argvdata/cpu-host-model-cmt.args
|
|
|
aa5bf2 |
@@ -12,7 +12,7 @@ QEMU_AUDIO_DRV=none \
|
|
|
d76c62 |
-S \
|
|
|
aa5bf2 |
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
|
|
d76c62 |
-machine pc,accel=tcg,usb=off,dump-guest-core=off \
|
|
|
9de337 |
--cpu Haswell,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+dtes64,+monitor,+ds_cpl,+vmx,+smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm \
|
|
|
9de337 |
+-cpu Haswell,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+dtes64,+monitor,+ds_cpl,+vmx,+smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,+rtm,+hle \
|
|
|
d76c62 |
-m 214 \
|
|
|
d76c62 |
-realtime mlock=off \
|
|
|
d76c62 |
-smp 6,sockets=6,cores=1,threads=1 \
|
|
|
d76c62 |
diff --git a/tests/qemuxml2argvdata/cpu-translation.x86_64-4.0.0.args b/tests/qemuxml2argvdata/cpu-translation.x86_64-4.0.0.args
|
|
|
9de337 |
index 79bb77cc68..ac7694ada1 100644
|
|
|
d76c62 |
--- a/tests/qemuxml2argvdata/cpu-translation.x86_64-4.0.0.args
|
|
|
d76c62 |
+++ b/tests/qemuxml2argvdata/cpu-translation.x86_64-4.0.0.args
|
|
|
9de337 |
@@ -12,7 +12,7 @@ QEMU_AUDIO_DRV=none \
|
|
|
9de337 |
-S \
|
|
|
9de337 |
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
|
|
d76c62 |
-machine pc-i440fx-4.0,accel=tcg,usb=off,dump-guest-core=off \
|
|
|
9de337 |
--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,kvm_pv_eoi=on,kvm_pv_unhalt=on \
|
|
|
9de337 |
+-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 \
|
|
|
d76c62 |
-m 214 \
|
|
|
d76c62 |
-overcommit mem-lock=off \
|
|
|
d76c62 |
-smp 1,sockets=1,cores=1,threads=1 \
|
|
|
d76c62 |
diff --git a/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args
|
|
|
9de337 |
index bb6b5c9986..f4a9fde2bf 100644
|
|
|
d76c62 |
--- a/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args
|
|
|
d76c62 |
+++ b/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args
|
|
|
9de337 |
@@ -11,7 +11,7 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
|
|
9de337 |
-S \
|
|
|
9de337 |
-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}' \
|
|
|
9de337 |
-machine pc,accel=tcg,usb=off,dump-guest-core=off,memory-backend=pc.ram \
|
|
|
9de337 |
--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,kvm-pv-eoi=on,kvm-pv-unhalt=on \
|
|
|
9de337 |
+-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 \
|
|
|
d76c62 |
-m 214 \
|
|
|
9de337 |
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
|
|
|
d76c62 |
-overcommit mem-lock=off \
|
|
|
d76c62 |
diff --git a/tests/qemuxml2argvdata/cpu-tsc-frequency.args b/tests/qemuxml2argvdata/cpu-tsc-frequency.args
|
|
|
aa5bf2 |
index 3a7d69d6b7..3b30aa92f8 100644
|
|
|
d76c62 |
--- a/tests/qemuxml2argvdata/cpu-tsc-frequency.args
|
|
|
d76c62 |
+++ b/tests/qemuxml2argvdata/cpu-tsc-frequency.args
|
|
|
aa5bf2 |
@@ -12,7 +12,7 @@ QEMU_AUDIO_DRV=none \
|
|
|
d76c62 |
-S \
|
|
|
aa5bf2 |
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
|
|
d76c62 |
-machine pc,accel=kvm,usb=off,dump-guest-core=off \
|
|
|
aa5bf2 |
--cpu Haswell,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+dtes64,+monitor,+ds_cpl,+vmx,+smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,+invtsc,tsc-frequency=4567890000 \
|
|
|
aa5bf2 |
+-cpu Haswell,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+dtes64,+monitor,+ds_cpl,+vmx,+smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,+invtsc,+rtm,+hle,tsc-frequency=4567890000 \
|
|
|
d76c62 |
-m 214 \
|
|
|
d76c62 |
-realtime mlock=off \
|
|
|
d76c62 |
-smp 1,sockets=1,cores=1,threads=1 \
|
|
|
d76c62 |
diff --git a/tests/qemuxml2argvdata/q35-acpi-nouefi.args b/tests/qemuxml2argvdata/q35-acpi-nouefi.args
|
|
|
aa5bf2 |
index 956ee3b6b7..55222293d0 100644
|
|
|
d76c62 |
--- a/tests/qemuxml2argvdata/q35-acpi-nouefi.args
|
|
|
d76c62 |
+++ b/tests/qemuxml2argvdata/q35-acpi-nouefi.args
|
|
|
aa5bf2 |
@@ -12,7 +12,7 @@ QEMU_AUDIO_DRV=none \
|
|
|
d76c62 |
-S \
|
|
|
aa5bf2 |
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-guest/master-key.aes \
|
|
|
d76c62 |
-machine q35,accel=tcg,usb=off,dump-guest-core=off \
|
|
|
d76c62 |
--cpu Haswell \
|
|
|
d76c62 |
+-cpu Haswell,+rtm,+hle \
|
|
|
d76c62 |
-m 1024 \
|
|
|
d76c62 |
-realtime mlock=off \
|
|
|
d76c62 |
-smp 1,sockets=1,cores=1,threads=1 \
|
|
|
d76c62 |
diff --git a/tests/qemuxml2argvdata/q35-acpi-uefi.args b/tests/qemuxml2argvdata/q35-acpi-uefi.args
|
|
|
aa5bf2 |
index 272369de22..ea03a2ac33 100644
|
|
|
d76c62 |
--- a/tests/qemuxml2argvdata/q35-acpi-uefi.args
|
|
|
d76c62 |
+++ b/tests/qemuxml2argvdata/q35-acpi-uefi.args
|
|
|
aa5bf2 |
@@ -12,7 +12,7 @@ QEMU_AUDIO_DRV=none \
|
|
|
d76c62 |
-S \
|
|
|
aa5bf2 |
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-guest/master-key.aes \
|
|
|
d76c62 |
-machine q35,accel=tcg,usb=off,dump-guest-core=off \
|
|
|
d76c62 |
--cpu Haswell \
|
|
|
d76c62 |
+-cpu Haswell,+rtm,+hle \
|
|
|
9de337 |
-drive file=/usr/share/OVMF/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on \
|
|
|
9de337 |
-drive file=/var/lib/libvirt/qemu/nvram/guest_VARS.fd,if=pflash,format=raw,unit=1 \
|
|
|
9de337 |
-m 1024 \
|
|
|
d76c62 |
diff --git a/tests/qemuxml2argvdata/q35-noacpi-nouefi.args b/tests/qemuxml2argvdata/q35-noacpi-nouefi.args
|
|
|
aa5bf2 |
index c6cffeea89..ce556db8e9 100644
|
|
|
d76c62 |
--- a/tests/qemuxml2argvdata/q35-noacpi-nouefi.args
|
|
|
d76c62 |
+++ b/tests/qemuxml2argvdata/q35-noacpi-nouefi.args
|
|
|
aa5bf2 |
@@ -12,7 +12,7 @@ QEMU_AUDIO_DRV=none \
|
|
|
d76c62 |
-S \
|
|
|
aa5bf2 |
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-guest/master-key.aes \
|
|
|
d76c62 |
-machine q35,accel=tcg,usb=off,dump-guest-core=off \
|
|
|
d76c62 |
--cpu Haswell \
|
|
|
d76c62 |
+-cpu Haswell,+rtm,+hle \
|
|
|
d76c62 |
-m 1024 \
|
|
|
d76c62 |
-realtime mlock=off \
|
|
|
d76c62 |
-smp 1,sockets=1,cores=1,threads=1 \
|
|
|
d76c62 |
--
|
|
|
aa5bf2 |
2.33.0
|
|
|
d76c62 |
|