|
|
073345 |
From 059091703401ef3029a1ffdbec8de97d5d5a1fd1 Mon Sep 17 00:00:00 2001
|
|
|
073345 |
Message-Id: <059091703401ef3029a1ffdbec8de97d5d5a1fd1@dist-git>
|
|
|
6d1f90 |
From: Jiri Denemark <jdenemar@redhat.com>
|
|
|
073345 |
Date: Fri, 15 Nov 2019 17:52:36 +0100
|
|
|
6d1f90 |
Subject: [PATCH] cpu_map: Drop pconfig from Icelake-Server CPU model
|
|
|
6d1f90 |
MIME-Version: 1.0
|
|
|
6d1f90 |
Content-Type: text/plain; charset=UTF-8
|
|
|
6d1f90 |
Content-Transfer-Encoding: 8bit
|
|
|
6d1f90 |
|
|
|
6d1f90 |
The pconfig feature was enabled in QEMU by accident in 3.1.0. All other
|
|
|
6d1f90 |
newer versions do not support it and it was removed from the
|
|
|
6d1f90 |
Icelake-Server CPU model in QEMU.
|
|
|
6d1f90 |
|
|
|
6d1f90 |
We don't normally change our CPU models even when QEMU does so to avoid
|
|
|
6d1f90 |
breaking migrations between different versions of libvirt. But we can
|
|
|
6d1f90 |
safely do so in this specific case. QEMU never supported enabling
|
|
|
6d1f90 |
pconfig so any domain which was able to start has pconfig disabled.
|
|
|
6d1f90 |
|
|
|
6d1f90 |
With a small compatibility hack which explicitly disables pconfig when
|
|
|
6d1f90 |
CPU model equals Icelake-Server in migratable domain definition, only
|
|
|
6d1f90 |
one migration scenario stays broken (and there's nothing we can do about
|
|
|
6d1f90 |
it): from any host to a host with libvirt < 5.10.0 and QEMU > 3.1.0.
|
|
|
6d1f90 |
|
|
|
6d1f90 |
https://bugzilla.redhat.com/show_bug.cgi?id=1749672
|
|
|
6d1f90 |
|
|
|
6d1f90 |
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
|
6d1f90 |
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
|
|
6d1f90 |
(cherry picked from commit 9cd03f7957e114892ae54e7ccb3758b6fb440644)
|
|
|
6d1f90 |
|
|
|
073345 |
https://bugzilla.redhat.com/show_bug.cgi?id=1756156
|
|
|
073345 |
https://bugzilla.redhat.com/show_bug.cgi?id=1721608
|
|
|
6d1f90 |
|
|
|
6d1f90 |
Conflicts:
|
|
|
6d1f90 |
src/cpu_map/x86_Icelake-Server.xml
|
|
|
6d1f90 |
- still monolithic cpu_map.xml downstream
|
|
|
6d1f90 |
|
|
|
6d1f90 |
src/qemu/qemu_domain.h
|
|
|
6d1f90 |
- context
|
|
|
6d1f90 |
|
|
|
6d1f90 |
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
|
073345 |
Message-Id: <6c06dac67da208e6ba8c07798c31405644acfb16.1573836581.git.jdenemar@redhat.com>
|
|
|
6d1f90 |
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
|
|
6d1f90 |
---
|
|
|
6d1f90 |
src/cpu/cpu_map.xml | 1 -
|
|
|
6d1f90 |
src/qemu/qemu_domain.c | 23 +++++++++++++++++++
|
|
|
6d1f90 |
src/qemu/qemu_domain.h | 3 +++
|
|
|
6d1f90 |
src/qemu/qemu_migration_cookie.c | 3 +++
|
|
|
6d1f90 |
.../x86_64-cpuid-Ice-Lake-Server-guest.xml | 1 -
|
|
|
6d1f90 |
.../x86_64-cpuid-Ice-Lake-Server-host.xml | 11 +--------
|
|
|
6d1f90 |
.../x86_64-cpuid-Ice-Lake-Server-json.xml | 1 -
|
|
|
6d1f90 |
7 files changed, 30 insertions(+), 13 deletions(-)
|
|
|
6d1f90 |
|
|
|
6d1f90 |
diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml
|
|
|
6d1f90 |
index acd9dad7dc..7b9f8bb452 100644
|
|
|
6d1f90 |
--- a/src/cpu/cpu_map.xml
|
|
|
6d1f90 |
+++ b/src/cpu/cpu_map.xml
|
|
|
6d1f90 |
@@ -2176,7 +2176,6 @@
|
|
|
6d1f90 |
<feature name='pat'/>
|
|
|
6d1f90 |
<feature name='pcid'/>
|
|
|
6d1f90 |
<feature name='pclmuldq'/>
|
|
|
6d1f90 |
- <feature name='pconfig'/>
|
|
|
6d1f90 |
<feature name='pdpe1gb'/>
|
|
|
6d1f90 |
<feature name='pge'/>
|
|
|
6d1f90 |
<feature name='pku'/>
|
|
|
6d1f90 |
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
|
|
6d1f90 |
index c9899b9e6d..f45d7d427e 100644
|
|
|
6d1f90 |
--- a/src/qemu/qemu_domain.c
|
|
|
6d1f90 |
+++ b/src/qemu/qemu_domain.c
|
|
|
6d1f90 |
@@ -7348,6 +7348,26 @@ qemuDomainDefCopy(virQEMUDriverPtr driver,
|
|
|
6d1f90 |
}
|
|
|
6d1f90 |
|
|
|
6d1f90 |
|
|
|
6d1f90 |
+int
|
|
|
6d1f90 |
+qemuDomainMakeCPUMigratable(virCPUDefPtr cpu)
|
|
|
6d1f90 |
+{
|
|
|
6d1f90 |
+ if (cpu->mode == VIR_CPU_MODE_CUSTOM &&
|
|
|
6d1f90 |
+ STREQ_NULLABLE(cpu->model, "Icelake-Server")) {
|
|
|
6d1f90 |
+ /* Originally Icelake-Server CPU model contained pconfig CPU feature.
|
|
|
6d1f90 |
+ * It was never actually enabled and thus it was removed. To enable
|
|
|
6d1f90 |
+ * migration to QEMU 3.1.0 (with both new and old libvirt), we
|
|
|
6d1f90 |
+ * explicitly disable pconfig in migration XML (otherwise old libvirt
|
|
|
6d1f90 |
+ * would think it was implicitly enabled on the source). New libvirt
|
|
|
6d1f90 |
+ * will drop it from the XML before starting the domain on new QEMU.
|
|
|
6d1f90 |
+ */
|
|
|
6d1f90 |
+ if (virCPUDefUpdateFeature(cpu, "pconfig", VIR_CPU_FEATURE_DISABLE) < 0)
|
|
|
6d1f90 |
+ return -1;
|
|
|
6d1f90 |
+ }
|
|
|
6d1f90 |
+
|
|
|
6d1f90 |
+ return 0;
|
|
|
6d1f90 |
+}
|
|
|
6d1f90 |
+
|
|
|
6d1f90 |
+
|
|
|
6d1f90 |
static int
|
|
|
6d1f90 |
qemuDomainDefFormatBufInternal(virQEMUDriverPtr driver,
|
|
|
6d1f90 |
virDomainDefPtr def,
|
|
|
6d1f90 |
@@ -7522,6 +7542,9 @@ qemuDomainDefFormatBufInternal(virQEMUDriverPtr driver,
|
|
|
6d1f90 |
if (!(def->cpu = virCPUDefCopy(origCPU)))
|
|
|
6d1f90 |
goto cleanup;
|
|
|
6d1f90 |
}
|
|
|
6d1f90 |
+
|
|
|
6d1f90 |
+ if (qemuDomainMakeCPUMigratable(def->cpu) < 0)
|
|
|
6d1f90 |
+ goto cleanup;
|
|
|
6d1f90 |
}
|
|
|
6d1f90 |
|
|
|
6d1f90 |
format:
|
|
|
6d1f90 |
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
|
|
|
6d1f90 |
index 8463a8b706..a29a678771 100644
|
|
|
6d1f90 |
--- a/src/qemu/qemu_domain.h
|
|
|
6d1f90 |
+++ b/src/qemu/qemu_domain.h
|
|
|
6d1f90 |
@@ -1072,4 +1072,7 @@ char * qemuDomainGetManagedPRSocketPath(qemuDomainObjPrivatePtr priv);
|
|
|
6d1f90 |
virDomainEventResumedDetailType
|
|
|
6d1f90 |
qemuDomainRunningReasonToResumeEvent(virDomainRunningReason reason);
|
|
|
6d1f90 |
|
|
|
6d1f90 |
+int
|
|
|
6d1f90 |
+qemuDomainMakeCPUMigratable(virCPUDefPtr cpu);
|
|
|
6d1f90 |
+
|
|
|
6d1f90 |
#endif /* __QEMU_DOMAIN_H__ */
|
|
|
6d1f90 |
diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_cookie.c
|
|
|
6d1f90 |
index 60df449d53..c270896944 100644
|
|
|
6d1f90 |
--- a/src/qemu/qemu_migration_cookie.c
|
|
|
6d1f90 |
+++ b/src/qemu/qemu_migration_cookie.c
|
|
|
6d1f90 |
@@ -543,6 +543,9 @@ qemuMigrationCookieAddCPU(qemuMigrationCookiePtr mig,
|
|
|
6d1f90 |
if (!(mig->cpu = virCPUDefCopy(vm->def->cpu)))
|
|
|
6d1f90 |
return -1;
|
|
|
6d1f90 |
|
|
|
6d1f90 |
+ if (qemuDomainMakeCPUMigratable(mig->cpu) < 0)
|
|
|
6d1f90 |
+ return -1;
|
|
|
6d1f90 |
+
|
|
|
6d1f90 |
mig->flags |= QEMU_MIGRATION_COOKIE_CPU;
|
|
|
6d1f90 |
|
|
|
6d1f90 |
return 0;
|
|
|
6d1f90 |
diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml
|
|
|
6d1f90 |
index 6ca2099b33..4676f3aa7d 100644
|
|
|
6d1f90 |
--- a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml
|
|
|
6d1f90 |
+++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml
|
|
|
6d1f90 |
@@ -32,5 +32,4 @@
|
|
|
6d1f90 |
<feature policy='require' name='rdctl-no'/>
|
|
|
6d1f90 |
<feature policy='require' name='ibrs-all'/>
|
|
|
6d1f90 |
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
|
|
6d1f90 |
- <feature policy='disable' name='pconfig'/>
|
|
|
6d1f90 |
</cpu>
|
|
|
6d1f90 |
diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml
|
|
|
6d1f90 |
index 31af20bc85..35b9e39629 100644
|
|
|
6d1f90 |
--- a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml
|
|
|
6d1f90 |
+++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml
|
|
|
6d1f90 |
@@ -1,6 +1,6 @@
|
|
|
6d1f90 |
<cpu>
|
|
|
6d1f90 |
<arch>x86_64</arch>
|
|
|
6d1f90 |
- <model>Icelake-Client</model>
|
|
|
6d1f90 |
+ <model>Icelake-Server</model>
|
|
|
6d1f90 |
<vendor>Intel</vendor>
|
|
|
6d1f90 |
<feature name='ds'/>
|
|
|
6d1f90 |
<feature name='acpi'/>
|
|
|
6d1f90 |
@@ -21,23 +21,14 @@
|
|
|
6d1f90 |
<feature name='osxsave'/>
|
|
|
6d1f90 |
<feature name='tsc_adjust'/>
|
|
|
6d1f90 |
<feature name='cmt'/>
|
|
|
6d1f90 |
- <feature name='avx512f'/>
|
|
|
6d1f90 |
- <feature name='avx512dq'/>
|
|
|
6d1f90 |
<feature name='avx512ifma'/>
|
|
|
6d1f90 |
- <feature name='clflushopt'/>
|
|
|
6d1f90 |
- <feature name='clwb'/>
|
|
|
6d1f90 |
- <feature name='avx512cd'/>
|
|
|
6d1f90 |
<feature name='sha-ni'/>
|
|
|
6d1f90 |
- <feature name='avx512bw'/>
|
|
|
6d1f90 |
- <feature name='avx512vl'/>
|
|
|
6d1f90 |
<feature name='ospke'/>
|
|
|
6d1f90 |
- <feature name='la57'/>
|
|
|
6d1f90 |
<feature name='stibp'/>
|
|
|
6d1f90 |
<feature name='arch-capabilities'/>
|
|
|
6d1f90 |
<feature name='xsaves'/>
|
|
|
6d1f90 |
<feature name='mbm_total'/>
|
|
|
6d1f90 |
<feature name='mbm_local'/>
|
|
|
6d1f90 |
- <feature name='pdpe1gb'/>
|
|
|
6d1f90 |
<feature name='invtsc'/>
|
|
|
6d1f90 |
<feature name='rdctl-no'/>
|
|
|
6d1f90 |
<feature name='ibrs-all'/>
|
|
|
6d1f90 |
diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-json.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-json.xml
|
|
|
6d1f90 |
index b043db58d7..ada11d2608 100644
|
|
|
6d1f90 |
--- a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-json.xml
|
|
|
6d1f90 |
+++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-json.xml
|
|
|
6d1f90 |
@@ -13,5 +13,4 @@
|
|
|
6d1f90 |
<feature policy='require' name='ibrs-all'/>
|
|
|
6d1f90 |
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
|
|
6d1f90 |
<feature policy='disable' name='intel-pt'/>
|
|
|
6d1f90 |
- <feature policy='disable' name='pconfig'/>
|
|
|
6d1f90 |
</cpu>
|
|
|
6d1f90 |
--
|
|
|
6d1f90 |
2.24.0
|
|
|
6d1f90 |
|