diff --git a/SOURCES/libvirt-cpu_conf-Pass-policy-to-CPU-feature-filtering-callbacks.patch b/SOURCES/libvirt-cpu_conf-Pass-policy-to-CPU-feature-filtering-callbacks.patch new file mode 100644 index 0000000..50c8e30 --- /dev/null +++ b/SOURCES/libvirt-cpu_conf-Pass-policy-to-CPU-feature-filtering-callbacks.patch @@ -0,0 +1,165 @@ +From 0631e5e7cf7042841d3de563e8c59a74f43b1d68 Mon Sep 17 00:00:00 2001 +Message-Id: <0631e5e7cf7042841d3de563e8c59a74f43b1d68@dist-git> +From: Jiri Denemark +Date: Fri, 22 Nov 2019 11:19:20 +0100 +Subject: [PATCH] cpu_conf: Pass policy to CPU feature filtering callbacks +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Jiri Denemark +Reviewed-by: Daniel P. Berrangé +(cherry picked from commit 668797dc5cb474585609559dbe610e09517e23e6) + +https://bugzilla.redhat.com/show_bug.cgi?id=1775133 +https://bugzilla.redhat.com/show_bug.cgi?id=1775134 +https://bugzilla.redhat.com/show_bug.cgi?id=1775137 + +Conflicts: + src/cpu/cpu_x86.c + src/qemu/qemu_capabilities.c + - no glib stuff downstream + +Signed-off-by: Jiri Denemark +Message-Id: +Reviewed-by: Michal Privoznik +--- + src/conf/cpu_conf.c | 6 +++--- + src/conf/cpu_conf.h | 1 + + src/cpu/cpu_x86.c | 13 ++++++++++++- + src/cpu/cpu_x86.h | 2 ++ + src/qemu/qemu_capabilities.c | 1 + + src/qemu/qemu_capabilities.h | 1 + + 6 files changed, 20 insertions(+), 4 deletions(-) + +diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c +index 4cccea9981..d4e3c81145 100644 +--- a/src/conf/cpu_conf.c ++++ b/src/conf/cpu_conf.c +@@ -135,7 +135,7 @@ virCPUDefCopyModelFilter(virCPUDefPtr dst, + dst->nfeatures = 0; + + for (i = 0; i < src->nfeatures; i++) { +- if (filter && !filter(src->features[i].name, opaque)) ++ if (filter && !filter(src->features[i].name, src->features[i].policy, opaque)) + continue; + + n = dst->nfeatures++; +@@ -858,7 +858,7 @@ virCPUDefFilterFeatures(virCPUDefPtr cpu, + size_t i = 0; + + while (i < cpu->nfeatures) { +- if (filter(cpu->features[i].name, opaque)) { ++ if (filter(cpu->features[i].name, cpu->features[i].policy, opaque)) { + i++; + continue; + } +@@ -893,7 +893,7 @@ virCPUDefCheckFeatures(virCPUDefPtr cpu, + *features = NULL; + + for (i = 0; i < cpu->nfeatures; i++) { +- if (filter(cpu->features[i].name, opaque)) { ++ if (filter(cpu->features[i].name, cpu->features[i].policy, opaque)) { + if (virStringListAdd(&list, cpu->features[i].name) < 0) + return -1; + n++; +diff --git a/src/conf/cpu_conf.h b/src/conf/cpu_conf.h +index cba0ec7c81..687e1b09d2 100644 +--- a/src/conf/cpu_conf.h ++++ b/src/conf/cpu_conf.h +@@ -162,6 +162,7 @@ virCPUDefCopyModel(virCPUDefPtr dst, + * Returns true if feature @name should copied, false otherwise. + */ + typedef bool (*virCPUDefFeatureFilter)(const char *name, ++ virCPUFeaturePolicy policy, + void *opaque); + + int +diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c +index 9104bdbf1e..cf5ef442e7 100644 +--- a/src/cpu/cpu_x86.c ++++ b/src/cpu/cpu_x86.c +@@ -3260,6 +3260,15 @@ virCPUx86ExpandFeatures(virCPUDefPtr cpu) + } + + ++static bool ++x86FeatureFilterMigratable(const char *name, ++ virCPUFeaturePolicy policy ATTRIBUTE_UNUSED, ++ void *cpu_map) ++{ ++ return x86FeatureIsMigratable(name, cpu_map); ++} ++ ++ + static virCPUDefPtr + virCPUx86CopyMigratable(virCPUDefPtr cpu) + { +@@ -3273,7 +3282,7 @@ virCPUx86CopyMigratable(virCPUDefPtr cpu) + return NULL; + + if (virCPUDefCopyModelFilter(copy, cpu, false, +- x86FeatureIsMigratable, map) < 0) ++ x86FeatureFilterMigratable, map) < 0) + goto error; + + return copy; +@@ -3408,6 +3417,7 @@ virCPUx86FeatureIsMSR(const char *name) + */ + bool + virCPUx86FeatureFilterSelectMSR(const char *name, ++ virCPUFeaturePolicy policy ATTRIBUTE_UNUSED, + void *opaque ATTRIBUTE_UNUSED) + { + return virCPUx86FeatureIsMSR(name); +@@ -3424,6 +3434,7 @@ virCPUx86FeatureFilterSelectMSR(const char *name, + */ + bool + virCPUx86FeatureFilterDropMSR(const char *name, ++ virCPUFeaturePolicy policy ATTRIBUTE_UNUSED, + void *opaque ATTRIBUTE_UNUSED) + { + return !virCPUx86FeatureIsMSR(name); +diff --git a/src/cpu/cpu_x86.h b/src/cpu/cpu_x86.h +index 5126679985..866fe17e88 100644 +--- a/src/cpu/cpu_x86.h ++++ b/src/cpu/cpu_x86.h +@@ -46,9 +46,11 @@ int virCPUx86DataSetVendor(virCPUDataPtr cpuData, + const char *vendor); + + bool virCPUx86FeatureFilterSelectMSR(const char *name, ++ virCPUFeaturePolicy policy, + void *opaque); + + bool virCPUx86FeatureFilterDropMSR(const char *name, ++ virCPUFeaturePolicy policy, + void *opaque); + + #endif /* __VIR_CPU_X86_H__ */ +diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c +index fbfe74d45b..c25d8c3e1a 100644 +--- a/src/qemu/qemu_capabilities.c ++++ b/src/qemu/qemu_capabilities.c +@@ -2753,6 +2753,7 @@ virQEMUCapsProbeQMPSEVCapabilities(virQEMUCapsPtr qemuCaps, + + bool + virQEMUCapsCPUFilterFeatures(const char *name, ++ virCPUFeaturePolicy policy ATTRIBUTE_UNUSED, + void *opaque) + { + virArch *arch = opaque; +diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h +index 1767b2ab6c..a4055d5458 100644 +--- a/src/qemu/qemu_capabilities.h ++++ b/src/qemu/qemu_capabilities.h +@@ -629,6 +629,7 @@ bool virQEMUCapsGuestIsNative(virArch host, + virArch guest); + + bool virQEMUCapsCPUFilterFeatures(const char *name, ++ virCPUFeaturePolicy policy, + void *opaque); + + const char * +-- +2.24.0 + diff --git a/SOURCES/libvirt-cpu_map-Drop-pconfig-from-Icelake-Server-CPU-model.patch b/SOURCES/libvirt-cpu_map-Drop-pconfig-from-Icelake-Server-CPU-model.patch new file mode 100644 index 0000000..ddccae4 --- /dev/null +++ b/SOURCES/libvirt-cpu_map-Drop-pconfig-from-Icelake-Server-CPU-model.patch @@ -0,0 +1,191 @@ +From 3b9e2f17d091c57f1fe7cbad18b0985e0644d8c2 Mon Sep 17 00:00:00 2001 +Message-Id: <3b9e2f17d091c57f1fe7cbad18b0985e0644d8c2@dist-git> +From: Jiri Denemark +Date: Fri, 22 Nov 2019 11:19:24 +0100 +Subject: [PATCH] cpu_map: Drop pconfig from Icelake-Server CPU model +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The pconfig feature was enabled in QEMU by accident in 3.1.0. All other +newer versions do not support it and it was removed from the +Icelake-Server CPU model in QEMU. + +We don't normally change our CPU models even when QEMU does so to avoid +breaking migrations between different versions of libvirt. But we can +safely do so in this specific case. QEMU never supported enabling +pconfig so any domain which was able to start has pconfig disabled. + +With a small compatibility hack which explicitly disables pconfig when +CPU model equals Icelake-Server in migratable domain definition, only +one migration scenario stays broken (and there's nothing we can do about +it): from any host to a host with libvirt < 5.10.0 and QEMU > 3.1.0. + +https://bugzilla.redhat.com/show_bug.cgi?id=1749672 + +Signed-off-by: Jiri Denemark +Reviewed-by: Daniel P. Berrangé +(cherry picked from commit 9cd03f7957e114892ae54e7ccb3758b6fb440644) + +https://bugzilla.redhat.com/show_bug.cgi?id=1775133 +https://bugzilla.redhat.com/show_bug.cgi?id=1775134 +https://bugzilla.redhat.com/show_bug.cgi?id=1775137 + +Conflicts: + src/cpu_map/x86_Icelake-Server.xml + - still monolithic cpu_map.xml downstream + + src/qemu/qemu_domain.h + - context + +Signed-off-by: Jiri Denemark +Message-Id: <430d543cce32100e879f1a5ea125abd4428aecf0.1574417839.git.jdenemar@redhat.com> +Reviewed-by: Michal Privoznik +--- + src/cpu/cpu_map.xml | 1 - + src/qemu/qemu_domain.c | 23 +++++++++++++++++++ + src/qemu/qemu_domain.h | 3 +++ + src/qemu/qemu_migration_cookie.c | 3 +++ + .../x86_64-cpuid-Ice-Lake-Server-guest.xml | 1 - + .../x86_64-cpuid-Ice-Lake-Server-host.xml | 11 +-------- + .../x86_64-cpuid-Ice-Lake-Server-json.xml | 1 - + 7 files changed, 30 insertions(+), 13 deletions(-) + +diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml +index acd9dad7dc..7b9f8bb452 100644 +--- a/src/cpu/cpu_map.xml ++++ b/src/cpu/cpu_map.xml +@@ -2176,7 +2176,6 @@ + + + +- + + + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index c9899b9e6d..f45d7d427e 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -7348,6 +7348,26 @@ qemuDomainDefCopy(virQEMUDriverPtr driver, + } + + ++int ++qemuDomainMakeCPUMigratable(virCPUDefPtr cpu) ++{ ++ if (cpu->mode == VIR_CPU_MODE_CUSTOM && ++ STREQ_NULLABLE(cpu->model, "Icelake-Server")) { ++ /* Originally Icelake-Server CPU model contained pconfig CPU feature. ++ * It was never actually enabled and thus it was removed. To enable ++ * migration to QEMU 3.1.0 (with both new and old libvirt), we ++ * explicitly disable pconfig in migration XML (otherwise old libvirt ++ * would think it was implicitly enabled on the source). New libvirt ++ * will drop it from the XML before starting the domain on new QEMU. ++ */ ++ if (virCPUDefUpdateFeature(cpu, "pconfig", VIR_CPU_FEATURE_DISABLE) < 0) ++ return -1; ++ } ++ ++ return 0; ++} ++ ++ + static int + qemuDomainDefFormatBufInternal(virQEMUDriverPtr driver, + virDomainDefPtr def, +@@ -7522,6 +7542,9 @@ qemuDomainDefFormatBufInternal(virQEMUDriverPtr driver, + if (!(def->cpu = virCPUDefCopy(origCPU))) + goto cleanup; + } ++ ++ if (qemuDomainMakeCPUMigratable(def->cpu) < 0) ++ goto cleanup; + } + + format: +diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h +index 8463a8b706..a29a678771 100644 +--- a/src/qemu/qemu_domain.h ++++ b/src/qemu/qemu_domain.h +@@ -1072,4 +1072,7 @@ char * qemuDomainGetManagedPRSocketPath(qemuDomainObjPrivatePtr priv); + virDomainEventResumedDetailType + qemuDomainRunningReasonToResumeEvent(virDomainRunningReason reason); + ++int ++qemuDomainMakeCPUMigratable(virCPUDefPtr cpu); ++ + #endif /* __QEMU_DOMAIN_H__ */ +diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_cookie.c +index 60df449d53..c270896944 100644 +--- a/src/qemu/qemu_migration_cookie.c ++++ b/src/qemu/qemu_migration_cookie.c +@@ -543,6 +543,9 @@ qemuMigrationCookieAddCPU(qemuMigrationCookiePtr mig, + if (!(mig->cpu = virCPUDefCopy(vm->def->cpu))) + return -1; + ++ if (qemuDomainMakeCPUMigratable(mig->cpu) < 0) ++ return -1; ++ + mig->flags |= QEMU_MIGRATION_COOKIE_CPU; + + return 0; +diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml +index 6ca2099b33..4676f3aa7d 100644 +--- a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml ++++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml +@@ -32,5 +32,4 @@ + + + +- + +diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml +index 31af20bc85..35b9e39629 100644 +--- a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml ++++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml +@@ -1,6 +1,6 @@ + + x86_64 +- Icelake-Client ++ Icelake-Server + Intel + + +@@ -21,23 +21,14 @@ + + + +- +- + +- +- +- + +- +- + +- + + + + + +- + + + +diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-json.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-json.xml +index b043db58d7..ada11d2608 100644 +--- a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-json.xml ++++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-json.xml +@@ -13,5 +13,4 @@ + + + +- + +-- +2.24.0 + diff --git a/SOURCES/libvirt-cputest-Add-data-for-Ice-Lake-Server-CPU.patch b/SOURCES/libvirt-cputest-Add-data-for-Ice-Lake-Server-CPU.patch new file mode 100644 index 0000000..17c8ee3 --- /dev/null +++ b/SOURCES/libvirt-cputest-Add-data-for-Ice-Lake-Server-CPU.patch @@ -0,0 +1,1429 @@ +From 3ec400ca1456fcd5ab9dd24763f4635c0c9819f8 Mon Sep 17 00:00:00 2001 +Message-Id: <3ec400ca1456fcd5ab9dd24763f4635c0c9819f8@dist-git> +From: Jiri Denemark +Date: Fri, 22 Nov 2019 11:19:23 +0100 +Subject: [PATCH] cputest: Add data for Ice Lake Server CPU +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Jiri Denemark +Reviewed-by: Daniel P. Berrangé +(cherry picked from commit 6b4cc15730e5b2330eaba2b211f16547dccd665c) + +https://bugzilla.redhat.com/show_bug.cgi?id=1775133 +https://bugzilla.redhat.com/show_bug.cgi?id=1775134 +https://bugzilla.redhat.com/show_bug.cgi?id=1775137 + +Signed-off-by: Jiri Denemark +Message-Id: <4ec13db912bfe8c72b5eb850f7f1ccc8180e4a9a.1574417839.git.jdenemar@redhat.com> +Reviewed-by: Michal Privoznik +--- + tests/cputest.c | 1 + + .../x86_64-cpuid-Ice-Lake-Server-disabled.xml | 7 + + .../x86_64-cpuid-Ice-Lake-Server-enabled.xml | 10 + + .../x86_64-cpuid-Ice-Lake-Server-guest.xml | 36 + + .../x86_64-cpuid-Ice-Lake-Server-host.xml | 45 + + .../x86_64-cpuid-Ice-Lake-Server-json.xml | 17 + + .../x86_64-cpuid-Ice-Lake-Server.json | 1142 +++++++++++++++++ + .../x86_64-cpuid-Ice-Lake-Server.sig | 4 + + .../x86_64-cpuid-Ice-Lake-Server.xml | 65 + + 9 files changed, 1327 insertions(+) + create mode 100644 tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-disabled.xml + create mode 100644 tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-enabled.xml + create mode 100644 tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml + create mode 100644 tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml + create mode 100644 tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-json.xml + create mode 100644 tests/cputestdata/x86_64-cpuid-Ice-Lake-Server.json + create mode 100644 tests/cputestdata/x86_64-cpuid-Ice-Lake-Server.sig + create mode 100644 tests/cputestdata/x86_64-cpuid-Ice-Lake-Server.xml + +diff --git a/tests/cputest.c b/tests/cputest.c +index 1ce50caccd..f0616c6ec9 100644 +--- a/tests/cputest.c ++++ b/tests/cputest.c +@@ -1296,6 +1296,7 @@ mymain(void) + DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-Platinum-8268", JSON_HOST); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-W3520", JSON_HOST); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-X5460", JSON_NONE); ++ DO_TEST_CPUID(VIR_ARCH_X86_64, "Ice-Lake-Server", JSON_MODELS); + + cleanup: + #if WITH_QEMU && WITH_YAJL +diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-disabled.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-disabled.xml +new file mode 100644 +index 0000000000..62c6bad612 +--- /dev/null ++++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-disabled.xml +@@ -0,0 +1,7 @@ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-enabled.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-enabled.xml +new file mode 100644 +index 0000000000..4a2c37a2ce +--- /dev/null ++++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-enabled.xml +@@ -0,0 +1,10 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml +new file mode 100644 +index 0000000000..6ca2099b33 +--- /dev/null ++++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml +@@ -0,0 +1,36 @@ ++ ++ Icelake-Server ++ Intel ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml +new file mode 100644 +index 0000000000..31af20bc85 +--- /dev/null ++++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml +@@ -0,0 +1,45 @@ ++ ++ x86_64 ++ Icelake-Client ++ Intel ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-json.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-json.xml +new file mode 100644 +index 0000000000..b043db58d7 +--- /dev/null ++++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-json.xml +@@ -0,0 +1,17 @@ ++ ++ Icelake-Server ++ Intel ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server.json b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server.json +new file mode 100644 +index 0000000000..6c7ea3f687 +--- /dev/null ++++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server.json +@@ -0,0 +1,1142 @@ ++{ ++ "return": { ++ "model": { ++ "name": "base", ++ "props": { ++ "phys-bits": 0, ++ "core-id": -1, ++ "xlevel": 2147483656, ++ "cmov": true, ++ "ia64": false, ++ "ssb-no": false, ++ "aes": true, ++ "mmx": true, ++ "rdpid": false, ++ "arat": true, ++ "gfni": true, ++ "ibrs-all": true, ++ "pause-filter": false, ++ "xsavec": true, ++ "intel-pt": false, ++ "hv-frequencies": false, ++ "tsc-frequency": 0, ++ "xd": true, ++ "x-intel-pt-auto-level": false, ++ "hv-vendor-id": "", ++ "kvm-asyncpf": true, ++ "kvm_asyncpf": true, ++ "perfctr_core": false, ++ "perfctr-core": false, ++ "mpx": true, ++ "pbe": false, ++ "decodeassists": false, ++ "avx512cd": true, ++ "sse4_1": true, ++ "sse4.1": true, ++ "sse4-1": true, ++ "family": 6, ++ "legacy-cache": true, ++ "host-phys-bits-limit": 48, ++ "vmware-cpuid-freq": true, ++ "wbnoinvd": true, ++ "avx512f": true, ++ "hv-stimer-direct": false, ++ "msr": true, ++ "mce": true, ++ "mca": true, ++ "hv-runtime": false, ++ "xcrypt": false, ++ "thread-id": -1, ++ "min-level": 13, ++ "xgetbv1": true, ++ "cid": false, ++ "hv-relaxed": false, ++ "hv-crash": false, ++ "ds": false, ++ "fxsr": true, ++ "xsaveopt": true, ++ "xtpr": false, ++ "hv-evmcs": false, ++ "avx512vl": true, ++ "avx512-vpopcntdq": true, ++ "phe": false, ++ "extapic": false, ++ "3dnowprefetch": true, ++ "avx512vbmi2": true, ++ "cr8legacy": false, ++ "stibp": true, ++ "cpuid-0xb": true, ++ "xcrypt-en": false, ++ "kvm_pv_eoi": true, ++ "apic-id": 4294967295, ++ "rsba": false, ++ "pn": false, ++ "dca": false, ++ "vendor": "GenuineIntel", ++ "hv-ipi": false, ++ "pku": true, ++ "smx": false, ++ "cmp_legacy": false, ++ "cmp-legacy": false, ++ "node-id": -1, ++ "avx512-4fmaps": false, ++ "vmcb_clean": false, ++ "vmcb-clean": false, ++ "3dnowext": false, ++ "amd-no-ssb": false, ++ "hle": true, ++ "npt": false, ++ "rdctl-no": true, ++ "memory": "/machine/unattached/system[0]", ++ "clwb": true, ++ "lbrv": false, ++ "adx": true, ++ "ss": true, ++ "pni": true, ++ "svm_lock": false, ++ "svm-lock": false, ++ "pfthreshold": false, ++ "smep": true, ++ "smap": true, ++ "x2apic": true, ++ "avx512vbmi": true, ++ "avx512vnni": true, ++ "hv-stimer": false, ++ "x-hv-synic-kvm-only": true, ++ "i64": true, ++ "flushbyasid": false, ++ "f16c": true, ++ "ace2-en": false, ++ "pat": true, ++ "pae": true, ++ "sse": true, ++ "die-id": -1, ++ "phe-en": false, ++ "kvm_nopiodelay": true, ++ "kvm-nopiodelay": true, ++ "tm": false, ++ "kvmclock-stable-bit": true, ++ "hypervisor": true, ++ "socket-id": -1, ++ "mds-no": false, ++ "pcommit": false, ++ "syscall": true, ++ "level": 13, ++ "avx512dq": true, ++ "x-migrate-smi-count": false, ++ "svm": false, ++ "full-cpuid-auto-level": true, ++ "hv-reset": false, ++ "invtsc": false, ++ "sse3": true, ++ "sse2": true, ++ "ssbd": true, ++ "est": false, ++ "avx512ifma": true, ++ "tm2": false, ++ "kvm-pv-ipi": true, ++ "kvm-pv-eoi": true, ++ "cx8": true, ++ "cldemote": false, ++ "hv-reenlightenment": false, ++ "kvm_mmu": false, ++ "kvm-mmu": false, ++ "sse4_2": true, ++ "sse4.2": true, ++ "sse4-2": true, ++ "pge": true, ++ "fill-mtrr-mask": true, ++ "avx512bitalg": true, ++ "nodeid_msr": false, ++ "pdcm": false, ++ "movbe": true, ++ "model": 106, ++ "nrip_save": false, ++ "nrip-save": false, ++ "kvm_pv_unhalt": true, ++ "ssse3": true, ++ "sse4a": false, ++ "invpcid": true, ++ "pdpe1gb": true, ++ "tsc-deadline": true, ++ "skip-l1dfl-vmentry": true, ++ "fma": true, ++ "cx16": true, ++ "de": true, ++ "enforce": false, ++ "stepping": 0, ++ "xsave": true, ++ "clflush": true, ++ "skinit": false, ++ "tsc": true, ++ "tce": false, ++ "fpu": true, ++ "ibs": false, ++ "ds_cpl": false, ++ "ds-cpl": false, ++ "host-phys-bits": true, ++ "fma4": false, ++ "la57": true, ++ "osvw": false, ++ "check": true, ++ "hv-spinlocks": 4294967295, ++ "pmu": false, ++ "pmm": false, ++ "apic": true, ++ "spec-ctrl": true, ++ "min-xlevel2": 0, ++ "tsc-adjust": true, ++ "tsc_adjust": true, ++ "kvm-steal-time": true, ++ "kvm_steal_time": true, ++ "kvmclock": true, ++ "l3-cache": true, ++ "lwp": false, ++ "hv-passthrough": false, ++ "amd-ssbd": false, ++ "ibpb": false, ++ "xop": false, ++ "avx": true, ++ "core-capability": false, ++ "movdiri": false, ++ "ace2": false, ++ "avx512bw": true, ++ "acpi": false, ++ "hv-vapic": false, ++ "fsgsbase": true, ++ "ht": false, ++ "nx": true, ++ "pclmulqdq": true, ++ "mmxext": false, ++ "vaes": true, ++ "popcnt": true, ++ "xsaves": true, ++ "movdir64b": false, ++ "tcg-cpuid": true, ++ "lm": true, ++ "umip": true, ++ "pse": true, ++ "avx2": true, ++ "sep": true, ++ "pclmuldq": true, ++ "virt-ssbd": false, ++ "x-hv-max-vps": -1, ++ "nodeid-msr": false, ++ "md-clear": false, ++ "split-lock-detect": false, ++ "kvm": true, ++ "misalignsse": false, ++ "min-xlevel": 2147483656, ++ "kvm-pv-unhalt": true, ++ "bmi2": true, ++ "bmi1": true, ++ "realized": false, ++ "tsc_scale": false, ++ "tsc-scale": false, ++ "topoext": false, ++ "hv-vpindex": false, ++ "xlevel2": 0, ++ "clflushopt": true, ++ "kvm-no-smi-migration": false, ++ "monitor": false, ++ "avx512er": false, ++ "pmm-en": false, ++ "pcid": true, ++ "arch-capabilities": true, ++ "3dnow": false, ++ "erms": true, ++ "x-force-features": false, ++ "lahf-lm": true, ++ "lahf_lm": true, ++ "vpclmulqdq": true, ++ "fxsr-opt": false, ++ "hv-synic": false, ++ "xstore": false, ++ "fxsr_opt": false, ++ "kvm-hint-dedicated": false, ++ "rtm": true, ++ "lmce": true, ++ "hv-time": false, ++ "perfctr-nb": false, ++ "perfctr_nb": false, ++ "ffxsr": false, ++ "hv-tlbflush": false, ++ "rdrand": true, ++ "rdseed": true, ++ "avx512-4vnniw": false, ++ "vmx": false, ++ "vme": true, ++ "dtes64": false, ++ "mtrr": true, ++ "rdtscp": true, ++ "pse36": true, ++ "kvm-pv-tlb-flush": true, ++ "tbm": false, ++ "wdt": false, ++ "pause_filter": false, ++ "sha-ni": true, ++ "model-id": "", ++ "abm": true, ++ "avx512pf": false, ++ "xstore-en": false ++ } ++ } ++ }, ++ "id": "model-expansion" ++} ++ ++{ ++ "return": [ ++ { ++ "name": "max", ++ "typename": "max-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": false ++ }, ++ { ++ "name": "host", ++ "typename": "host-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": false ++ }, ++ { ++ "name": "base", ++ "typename": "base-x86_64-cpu", ++ "unavailable-features": [], ++ "static": true, ++ "migration-safe": true ++ }, ++ { ++ "name": "qemu64-v1", ++ "typename": "qemu64-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "qemu64", ++ "typename": "qemu64-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "qemu32-v1", ++ "typename": "qemu32-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "qemu32", ++ "typename": "qemu32-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "phenom-v1", ++ "typename": "phenom-v1-x86_64-cpu", ++ "unavailable-features": [ ++ "mmxext", ++ "fxsr-opt", ++ "3dnowext", ++ "3dnow", ++ "sse4a", ++ "npt" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "phenom", ++ "typename": "phenom-x86_64-cpu", ++ "unavailable-features": [ ++ "mmxext", ++ "fxsr-opt", ++ "3dnowext", ++ "3dnow", ++ "sse4a", ++ "npt" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "pentium3-v1", ++ "typename": "pentium3-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "pentium3", ++ "typename": "pentium3-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "pentium2-v1", ++ "typename": "pentium2-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "pentium2", ++ "typename": "pentium2-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "pentium-v1", ++ "typename": "pentium-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "pentium", ++ "typename": "pentium-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "n270-v1", ++ "typename": "n270-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "n270", ++ "typename": "n270-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "kvm64-v1", ++ "typename": "kvm64-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "kvm64", ++ "typename": "kvm64-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "kvm32-v1", ++ "typename": "kvm32-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "kvm32", ++ "typename": "kvm32-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "cpu64-rhel6-v1", ++ "typename": "cpu64-rhel6-v1-x86_64-cpu", ++ "unavailable-features": [ ++ "sse4a" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "cpu64-rhel6", ++ "typename": "cpu64-rhel6-x86_64-cpu", ++ "unavailable-features": [ ++ "sse4a" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "coreduo-v1", ++ "typename": "coreduo-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "coreduo", ++ "typename": "coreduo-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "core2duo-v1", ++ "typename": "core2duo-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "core2duo", ++ "typename": "core2duo-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "athlon-v1", ++ "typename": "athlon-v1-x86_64-cpu", ++ "unavailable-features": [ ++ "mmxext", ++ "3dnowext", ++ "3dnow" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "athlon", ++ "typename": "athlon-x86_64-cpu", ++ "unavailable-features": [ ++ "mmxext", ++ "3dnowext", ++ "3dnow" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Westmere-v2", ++ "typename": "Westmere-v2-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Westmere-v1", ++ "typename": "Westmere-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Westmere-IBRS", ++ "typename": "Westmere-IBRS-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Westmere", ++ "typename": "Westmere-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Snowridge-v1", ++ "typename": "Snowridge-v1-x86_64-cpu", ++ "unavailable-features": [ ++ "cldemote", ++ "movdiri", ++ "movdir64b", ++ "core-capability", ++ "split-lock-detect" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Snowridge", ++ "typename": "Snowridge-x86_64-cpu", ++ "unavailable-features": [ ++ "cldemote", ++ "movdiri", ++ "movdir64b", ++ "core-capability", ++ "split-lock-detect" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Skylake-Server-v2", ++ "typename": "Skylake-Server-v2-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Skylake-Server-v1", ++ "typename": "Skylake-Server-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Skylake-Server-IBRS", ++ "typename": "Skylake-Server-IBRS-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Skylake-Server", ++ "typename": "Skylake-Server-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Skylake-Client-v2", ++ "typename": "Skylake-Client-v2-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Skylake-Client-v1", ++ "typename": "Skylake-Client-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Skylake-Client-IBRS", ++ "typename": "Skylake-Client-IBRS-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Skylake-Client", ++ "typename": "Skylake-Client-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "SandyBridge-v2", ++ "typename": "SandyBridge-v2-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "SandyBridge-v1", ++ "typename": "SandyBridge-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "SandyBridge-IBRS", ++ "typename": "SandyBridge-IBRS-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "SandyBridge", ++ "typename": "SandyBridge-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Penryn-v1", ++ "typename": "Penryn-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Penryn", ++ "typename": "Penryn-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Opteron_G5-v1", ++ "typename": "Opteron_G5-v1-x86_64-cpu", ++ "unavailable-features": [ ++ "sse4a", ++ "misalignsse", ++ "xop", ++ "fma4", ++ "tbm", ++ "npt", ++ "nrip-save" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Opteron_G5", ++ "typename": "Opteron_G5-x86_64-cpu", ++ "unavailable-features": [ ++ "sse4a", ++ "misalignsse", ++ "xop", ++ "fma4", ++ "tbm" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Opteron_G4-v1", ++ "typename": "Opteron_G4-v1-x86_64-cpu", ++ "unavailable-features": [ ++ "sse4a", ++ "misalignsse", ++ "xop", ++ "fma4", ++ "npt", ++ "nrip-save" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Opteron_G4", ++ "typename": "Opteron_G4-x86_64-cpu", ++ "unavailable-features": [ ++ "sse4a", ++ "misalignsse", ++ "xop", ++ "fma4" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Opteron_G3-v1", ++ "typename": "Opteron_G3-v1-x86_64-cpu", ++ "unavailable-features": [ ++ "sse4a", ++ "misalignsse" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Opteron_G3", ++ "typename": "Opteron_G3-x86_64-cpu", ++ "unavailable-features": [ ++ "sse4a", ++ "misalignsse" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Opteron_G2-v1", ++ "typename": "Opteron_G2-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Opteron_G2", ++ "typename": "Opteron_G2-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Opteron_G1-v1", ++ "typename": "Opteron_G1-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Opteron_G1", ++ "typename": "Opteron_G1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Nehalem-v2", ++ "typename": "Nehalem-v2-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Nehalem-v1", ++ "typename": "Nehalem-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Nehalem-IBRS", ++ "typename": "Nehalem-IBRS-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Nehalem", ++ "typename": "Nehalem-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "KnightsMill-v1", ++ "typename": "KnightsMill-v1-x86_64-cpu", ++ "unavailable-features": [ ++ "avx512pf", ++ "avx512er", ++ "avx512-4vnniw", ++ "avx512-4fmaps" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "KnightsMill", ++ "typename": "KnightsMill-x86_64-cpu", ++ "unavailable-features": [ ++ "avx512pf", ++ "avx512er", ++ "avx512-4vnniw", ++ "avx512-4fmaps" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "IvyBridge-v2", ++ "typename": "IvyBridge-v2-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "IvyBridge-v1", ++ "typename": "IvyBridge-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "IvyBridge-IBRS", ++ "typename": "IvyBridge-IBRS-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "IvyBridge", ++ "typename": "IvyBridge-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Icelake-Server-v1", ++ "typename": "Icelake-Server-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Icelake-Server", ++ "typename": "Icelake-Server-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Icelake-Client-v1", ++ "typename": "Icelake-Client-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Icelake-Client", ++ "typename": "Icelake-Client-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Haswell-v4", ++ "typename": "Haswell-v4-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Haswell-v3", ++ "typename": "Haswell-v3-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Haswell-v2", ++ "typename": "Haswell-v2-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Haswell-v1", ++ "typename": "Haswell-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Haswell-noTSX-IBRS", ++ "typename": "Haswell-noTSX-IBRS-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Haswell-noTSX", ++ "typename": "Haswell-noTSX-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Haswell-IBRS", ++ "typename": "Haswell-IBRS-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Haswell", ++ "typename": "Haswell-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "EPYC-v2", ++ "typename": "EPYC-v2-x86_64-cpu", ++ "unavailable-features": [ ++ "mmxext", ++ "fxsr-opt", ++ "cr8legacy", ++ "sse4a", ++ "misalignsse", ++ "osvw", ++ "ibpb", ++ "npt", ++ "nrip-save" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "EPYC-v1", ++ "typename": "EPYC-v1-x86_64-cpu", ++ "unavailable-features": [ ++ "mmxext", ++ "fxsr-opt", ++ "cr8legacy", ++ "sse4a", ++ "misalignsse", ++ "osvw", ++ "npt", ++ "nrip-save" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "EPYC-IBPB", ++ "typename": "EPYC-IBPB-x86_64-cpu", ++ "unavailable-features": [ ++ "mmxext", ++ "fxsr-opt", ++ "cr8legacy", ++ "sse4a", ++ "misalignsse", ++ "osvw", ++ "ibpb" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "EPYC", ++ "typename": "EPYC-x86_64-cpu", ++ "unavailable-features": [ ++ "mmxext", ++ "fxsr-opt", ++ "cr8legacy", ++ "sse4a", ++ "misalignsse", ++ "osvw" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Dhyana-v1", ++ "typename": "Dhyana-v1-x86_64-cpu", ++ "unavailable-features": [ ++ "mmxext", ++ "fxsr-opt", ++ "cr8legacy", ++ "sse4a", ++ "misalignsse", ++ "osvw", ++ "ibpb", ++ "npt", ++ "nrip-save" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Dhyana", ++ "typename": "Dhyana-x86_64-cpu", ++ "unavailable-features": [ ++ "mmxext", ++ "fxsr-opt", ++ "cr8legacy", ++ "sse4a", ++ "misalignsse", ++ "osvw", ++ "ibpb", ++ "npt", ++ "nrip-save" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Conroe-v1", ++ "typename": "Conroe-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Conroe", ++ "typename": "Conroe-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Cascadelake-Server-v2", ++ "typename": "Cascadelake-Server-v2-x86_64-cpu", ++ "unavailable-features": [ ++ "mds-no" ++ ], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Cascadelake-Server-v1", ++ "typename": "Cascadelake-Server-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Cascadelake-Server", ++ "typename": "Cascadelake-Server-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Broadwell-v4", ++ "typename": "Broadwell-v4-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Broadwell-v3", ++ "typename": "Broadwell-v3-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Broadwell-v2", ++ "typename": "Broadwell-v2-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Broadwell-v1", ++ "typename": "Broadwell-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Broadwell-noTSX-IBRS", ++ "typename": "Broadwell-noTSX-IBRS-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Broadwell-noTSX", ++ "typename": "Broadwell-noTSX-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Broadwell-IBRS", ++ "typename": "Broadwell-IBRS-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "Broadwell", ++ "typename": "Broadwell-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "486-v1", ++ "typename": "486-v1-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ }, ++ { ++ "name": "486", ++ "typename": "486-x86_64-cpu", ++ "unavailable-features": [], ++ "static": false, ++ "migration-safe": true ++ } ++ ], ++ "id": "definitions" ++} +diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server.sig b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server.sig +new file mode 100644 +index 0000000000..c6492ff310 +--- /dev/null ++++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server.sig +@@ -0,0 +1,4 @@ ++0606a0 ++family: 6 (0x06) ++model: 106 (0x6a) ++stepping: 0 (0x00) +diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server.xml +new file mode 100644 +index 0000000000..887926ae19 +--- /dev/null ++++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server.xml +@@ -0,0 +1,65 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +-- +2.24.0 + diff --git a/SOURCES/libvirt-qemu-Drop-disabled-CPU-features-unknown-to-QEMU.patch b/SOURCES/libvirt-qemu-Drop-disabled-CPU-features-unknown-to-QEMU.patch new file mode 100644 index 0000000..0528871 --- /dev/null +++ b/SOURCES/libvirt-qemu-Drop-disabled-CPU-features-unknown-to-QEMU.patch @@ -0,0 +1,99 @@ +From 5e1f4ab125d37efb4c8224184f4cd7dd7a0cfdcd Mon Sep 17 00:00:00 2001 +Message-Id: <5e1f4ab125d37efb4c8224184f4cd7dd7a0cfdcd@dist-git> +From: Jiri Denemark +Date: Fri, 22 Nov 2019 11:19:22 +0100 +Subject: [PATCH] qemu: Drop disabled CPU features unknown to QEMU +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When a CPU definition wants to explicitly disable some features that are +unknown to QEMU, we can safely drop them from the definition before +starting QEMU. Naturally QEMU won't enable such features implicitly. + +Signed-off-by: Jiri Denemark +Reviewed-by: Daniel P. Berrangé +(cherry picked from commit ac34e141596fab70fbe91a396311f80db6cb57c5) + +https://bugzilla.redhat.com/show_bug.cgi?id=1775133 +https://bugzilla.redhat.com/show_bug.cgi?id=1775134 +https://bugzilla.redhat.com/show_bug.cgi?id=1775137 + +Conflicts: + src/qemu/qemu_process.c + - downstream still uses cleanup label + +Signed-off-by: Jiri Denemark +Message-Id: <1c07cf7bb969d38770555e7369d4578ba57bd38c.1574417839.git.jdenemar@redhat.com> +Reviewed-by: Michal Privoznik +--- + src/qemu/qemu_process.c | 32 +++++++++++++++++++ + ...-Icelake-Server-pconfig.x86_64-latest.args | 2 +- + 2 files changed, 33 insertions(+), 1 deletion(-) + +diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c +index 0cd61f02bb..0700b054f3 100644 +--- a/src/qemu/qemu_process.c ++++ b/src/qemu/qemu_process.c +@@ -5730,6 +5730,26 @@ qemuProcessSetupHotpluggableVcpus(virQEMUDriverPtr driver, + } + + ++static bool ++qemuProcessDropUnknownCPUFeatures(const char *name, ++ virCPUFeaturePolicy policy, ++ void *opaque) ++{ ++ const char **features = opaque; ++ ++ if (policy != VIR_CPU_FEATURE_DISABLE && ++ policy != VIR_CPU_FEATURE_FORBID) ++ return true; ++ ++ if (virStringListHasString(features, name)) ++ return true; ++ ++ /* Features unknown to QEMU are implicitly disabled, we can just drop them ++ * from the definition. */ ++ return false; ++} ++ ++ + static int + qemuProcessUpdateGuestCPU(virDomainDefPtr def, + virQEMUCapsPtr qemuCaps, +@@ -5792,6 +5812,18 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def, + virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType)) < 0) + goto cleanup; + ++ if (ARCH_IS_X86(def->os.arch)) { ++ VIR_AUTOSTRINGLIST features = NULL; ++ ++ if (virQEMUCapsGetCPUFeatures(qemuCaps, def->virtType, false, &features) < 0) ++ goto cleanup; ++ ++ if (features && ++ virCPUDefFilterFeatures(def->cpu, qemuProcessDropUnknownCPUFeatures, ++ features) < 0) ++ goto cleanup; ++ } ++ + def->cpu->fallback = VIR_CPU_FALLBACK_FORBID; + ret = 0; + +diff --git a/tests/qemuxml2argvdata/cpu-Icelake-Server-pconfig.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-Icelake-Server-pconfig.x86_64-latest.args +index 664db44e7b..de737bfed7 100644 +--- a/tests/qemuxml2argvdata/cpu-Icelake-Server-pconfig.x86_64-latest.args ++++ b/tests/qemuxml2argvdata/cpu-Icelake-Server-pconfig.x86_64-latest.args +@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ + -object secret,id=masterKey0,format=raw,\ + file=/tmp/lib/domain--1-test/master-key.aes \ + -machine pc,accel=kvm,usb=off,dump-guest-core=off \ +--cpu Icelake-Server,pconfig=off \ ++-cpu Icelake-Server \ + -m 214 \ + -realtime mlock=off \ + -smp 1,sockets=1,cores=1,threads=1 \ +-- +2.24.0 + diff --git a/SOURCES/libvirt-qemu-Fix-NULL-ptr-dereference-caused-by-qemuDomainDefFormatBufInternal.patch b/SOURCES/libvirt-qemu-Fix-NULL-ptr-dereference-caused-by-qemuDomainDefFormatBufInternal.patch new file mode 100644 index 0000000..ba14063 --- /dev/null +++ b/SOURCES/libvirt-qemu-Fix-NULL-ptr-dereference-caused-by-qemuDomainDefFormatBufInternal.patch @@ -0,0 +1,51 @@ +From b21c8cad6d25e328bb93f1ec218546f09c2fbed4 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Erik Skultety +Date: Fri, 22 Nov 2019 11:19:25 +0100 +Subject: [PATCH] qemu: Fix NULL ptr dereference caused by + qemuDomainDefFormatBufInternal + +qemuDomainDefFormatBufInternal function wasn't testing whether the CPU +was actually defined in the XML and saving such a domain resulted in the +following backtrace: + +0 in qemuDomainMakeCPUMigratable (cpu=0x0) +1 in qemuDomainDefFormatBufInternal() +2 in qemuDomainDefFormatXMLInternal() +3 in qemuDomainDefFormatLive() +4 in qemuDomainSaveInternal() +5 in qemuDomainSaveFlags() +6 in qemuDomainSave() +7 in virDomainSave() + +Signed-off-by: Erik Skultety +Reviewed-by: Daniel Henrique Barboza +(cherry picked from commit 2816fe2e846ab3bd2bfbef123c426a17f1e1df98) + +https://bugzilla.redhat.com/show_bug.cgi?id=1775133 +https://bugzilla.redhat.com/show_bug.cgi?id=1775134 +https://bugzilla.redhat.com/show_bug.cgi?id=1775137 + +Signed-off-by: Jiri Denemark +Message-Id: <13caf98777b14c8bc341de37a85c4dc04a50d78e.1574417839.git.jdenemar@redhat.com> +Reviewed-by: Michal Privoznik +--- + src/qemu/qemu_domain.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index f45d7d427e..6b867ad669 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -7543,7 +7543,7 @@ qemuDomainDefFormatBufInternal(virQEMUDriverPtr driver, + goto cleanup; + } + +- if (qemuDomainMakeCPUMigratable(def->cpu) < 0) ++ if (def->cpu && qemuDomainMakeCPUMigratable(def->cpu) < 0) + goto cleanup; + } + +-- +2.24.0 + diff --git a/SOURCES/libvirt-qemuxml2-test-Add-tests-for-Icelake-Server-pconfig.patch b/SOURCES/libvirt-qemuxml2-test-Add-tests-for-Icelake-Server-pconfig.patch new file mode 100644 index 0000000..3f1cb19 --- /dev/null +++ b/SOURCES/libvirt-qemuxml2-test-Add-tests-for-Icelake-Server-pconfig.patch @@ -0,0 +1,128 @@ +From af4ae65466a629b58cb9493630dc4684c49f3d5e Mon Sep 17 00:00:00 2001 +Message-Id: +From: Jiri Denemark +Date: Fri, 22 Nov 2019 11:19:21 +0100 +Subject: [PATCH] qemuxml2*test: Add tests for Icelake-Server, -pconfig +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Jiri Denemark +Reviewed-by: Daniel P. Berrangé +(cherry picked from commit ae793ecbcbd17b118ef3a876d247abb49574ab0e) + +https://bugzilla.redhat.com/show_bug.cgi?id=1775133 +https://bugzilla.redhat.com/show_bug.cgi?id=1775134 +https://bugzilla.redhat.com/show_bug.cgi?id=1775137 + +Conflicts: + tests/qemuxml2argvtest.c + - several new tests upstream + - test case for QEMU 3.1.0 dropped; caps data are missing + downstream and the case is not important here + + tests/qemuxml2argvdata/cpu-Icelake-Server-pconfig.x86_64-3.1.0.args + - test case for QEMU 3.1.0 dropped; caps data are missing + downstream and the case is not important here + + tests/qemuxml2argvdata/cpu-Icelake-Server-pconfig.x86_64-latest.args + - downstream generates slightly different command line + + tests/qemuxml2xmloutdata/cpu-Icelake-Server-pconfig.x86_64-3.1.0.xml + tests/qemuxml2xmloutdata/cpu-Icelake-Server-pconfig.x86_64-latest.xml + tests/qemuxml2xmltest.c + - missing DO_TEST_CAPS_* macros; the change to this test was + dropped as it is not as important as the xml2argv test + +Signed-off-by: Jiri Denemark +Message-Id: <874677b6cbabc2dbf7ff81fc0325de1b99790a45.1574417839.git.jdenemar@redhat.com> +Reviewed-by: Michal Privoznik +--- + ...-Icelake-Server-pconfig.x86_64-latest.args | 31 +++++++++++++++++++ + .../cpu-Icelake-Server-pconfig.xml | 22 +++++++++++++ + tests/qemuxml2argvtest.c | 2 ++ + 3 files changed, 55 insertions(+) + create mode 100644 tests/qemuxml2argvdata/cpu-Icelake-Server-pconfig.x86_64-latest.args + create mode 100644 tests/qemuxml2argvdata/cpu-Icelake-Server-pconfig.xml + +diff --git a/tests/qemuxml2argvdata/cpu-Icelake-Server-pconfig.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-Icelake-Server-pconfig.x86_64-latest.args +new file mode 100644 +index 0000000000..664db44e7b +--- /dev/null ++++ b/tests/qemuxml2argvdata/cpu-Icelake-Server-pconfig.x86_64-latest.args +@@ -0,0 +1,31 @@ ++LC_ALL=C \ ++PATH=/bin \ ++HOME=/home/test \ ++USER=test \ ++LOGNAME=test \ ++QEMU_AUDIO_DRV=none \ ++/usr/bin/qemu-system-x86_64 \ ++-name guest=test,debug-threads=on \ ++-S \ ++-object secret,id=masterKey0,format=raw,\ ++file=/tmp/lib/domain--1-test/master-key.aes \ ++-machine pc,accel=kvm,usb=off,dump-guest-core=off \ ++-cpu Icelake-Server,pconfig=off \ ++-m 214 \ ++-realtime mlock=off \ ++-smp 1,sockets=1,cores=1,threads=1 \ ++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ ++-display none \ ++-no-user-config \ ++-nodefaults \ ++-chardev socket,id=charmonitor,fd=1729,server,nowait \ ++-mon chardev=charmonitor,id=monitor,mode=control \ ++-rtc base=utc \ ++-no-shutdown \ ++-no-acpi \ ++-boot strict=on \ ++-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ ++-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2 \ ++-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ ++resourcecontrol=deny \ ++-msg timestamp=on +diff --git a/tests/qemuxml2argvdata/cpu-Icelake-Server-pconfig.xml b/tests/qemuxml2argvdata/cpu-Icelake-Server-pconfig.xml +new file mode 100644 +index 0000000000..ec64e1ee51 +--- /dev/null ++++ b/tests/qemuxml2argvdata/cpu-Icelake-Server-pconfig.xml +@@ -0,0 +1,22 @@ ++ ++ test ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219100 ++ 219100 ++ 1 ++ ++ hvm ++ ++ ++ ++ Icelake-Server ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu-system-x86_64 ++ ++ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index 03d6a60736..5aff9b6e37 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -3000,6 +3000,8 @@ mymain(void) + + DO_TEST_CAPS_VER("launch-security-sev", "2.12.0"); + ++ DO_TEST_CAPS_LATEST("cpu-Icelake-Server-pconfig"); ++ + if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL) + virFileDeleteTree(fakerootdir); + +-- +2.24.0 + diff --git a/SPECS/libvirt.spec b/SPECS/libvirt.spec index a176088..ed2dd31 100644 --- a/SPECS/libvirt.spec +++ b/SPECS/libvirt.spec @@ -37,7 +37,7 @@ %define with_qemu_tcg 0 %define qemu_kvm_arches x86_64 %if 0%{?rhel} >= 7 - %define qemu_kvm_arches x86_64 %{power64} aarch64 s390x %{arm} + %define qemu_kvm_arches x86_64 %{power64} aarch64 s390x %endif %endif @@ -251,7 +251,7 @@ Summary: Library providing a simple virtualization API Name: libvirt Version: 4.5.0 -Release: 35%{?dist}%{?extra_release} +Release: 35.1%{?dist}%{?extra_release} License: LGPLv2+ URL: https://libvirt.org/ @@ -804,6 +804,12 @@ Patch540: libvirt-vircgroupv2-fix-parsing-multiple-values-in-single-file.patch Patch541: libvirt-vircgroupv2-fix-virCgroupV2GetCpuCfsQuota-for-max-value.patch Patch542: libvirt-vircgroupv2-fix-abort-in-VIR_AUTOFREE.patch Patch543: libvirt-vircgroupv2-fix-setting-cpu.max-period.patch +Patch544: libvirt-cpu_conf-Pass-policy-to-CPU-feature-filtering-callbacks.patch +Patch545: libvirt-qemuxml2-test-Add-tests-for-Icelake-Server-pconfig.patch +Patch546: libvirt-qemu-Drop-disabled-CPU-features-unknown-to-QEMU.patch +Patch547: libvirt-cputest-Add-data-for-Ice-Lake-Server-CPU.patch +Patch548: libvirt-cpu_map-Drop-pconfig-from-Icelake-Server-CPU-model.patch +Patch549: libvirt-qemu-Fix-NULL-ptr-dereference-caused-by-qemuDomainDefFormatBufInternal.patch Requires: libvirt-daemon = %{version}-%{release} Requires: libvirt-daemon-config-network = %{version}-%{release} @@ -2715,6 +2721,14 @@ exit 0 %changelog +* Wed Nov 27 2019 Jiri Denemark - 4.5.0-35.1.el8 +- cpu_conf: Pass policy to CPU feature filtering callbacks (rhbz#1775133, rhbz#1775134, rhbz#1775137) +- qemuxml2*test: Add tests for Icelake-Server, -pconfig (rhbz#1775133, rhbz#1775134, rhbz#1775137) +- qemu: Drop disabled CPU features unknown to QEMU (rhbz#1775133, rhbz#1775134, rhbz#1775137) +- cputest: Add data for Ice Lake Server CPU (rhbz#1775133, rhbz#1775134, rhbz#1775137) +- cpu_map: Drop pconfig from Icelake-Server CPU model (rhbz#1775133, rhbz#1775134, rhbz#1775137) +- qemu: Fix NULL ptr dereference caused by qemuDomainDefFormatBufInternal (rhbz#1775133, rhbz#1775134, rhbz#1775137) + * Mon Sep 16 2019 Jiri Denemark - 4.5.0-35 - vircgroupv2: fix setting cpu.max period (rhbz#1749227)