[libvirt] [PATCH 0/3] qemu: Parse CPU stepping from query-cpu-model-expansion

Even though only family and model are used for matching CPUID data with CPU models from cpu_map.xml, stepping is used by x86DataFilterTSX which is supposed to disable TSX on CPU models with broken TSX support. This series applies on top of "Fix host-model if the chosen CPU model has more features in QEMU compared to our cpu_map.xml" series I sent a week ago. Jiri Denemark (3): qemu: Parse CPU stepping from query-cpu-model-expansion cputest: Update Xeon-E7-8890 data cputest: Add query-cpu-definitions reply for Xeon-E7-8890 src/cpu/cpu_x86.c | 16 +- src/cpu/cpu_x86.h | 3 +- src/qemu/qemu_capabilities.c | 5 +- tests/cputest.c | 2 +- .../x86_64-cpuid-Xeon-E7-8890-disabled.xml | 6 + .../x86_64-cpuid-Xeon-E7-8890-enabled.xml | 9 + .../cputestdata/x86_64-cpuid-Xeon-E7-8890-json.xml | 14 + tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.json | 521 +++++++++++++++++++++ tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.xml | 6 +- 9 files changed, 569 insertions(+), 13 deletions(-) create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-disabled.xml create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-enabled.xml create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-json.xml create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.json -- 2.14.2

Even though only family and model are used for matching CPUID data with CPU models from cpu_map.xml, stepping is used by x86DataFilterTSX which is supposed to disable TSX on CPU models with broken TSX support. Thus we need to start parsing stepping from QEMU to make sure we don't disable TSX on CPUs which provide working TSX implementation. See the following patch for a real world example of such CPU. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- src/cpu/cpu_x86.c | 16 +++++++++------- src/cpu/cpu_x86.h | 3 ++- src/qemu/qemu_capabilities.c | 5 ++++- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 0dbc17f199..1e82fbd943 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -531,7 +531,8 @@ virCPUx86VendorToCPUID(const char *vendor, static uint32_t x86MakeSignature(unsigned int family, - unsigned int model) + unsigned int model, + unsigned int stepping) { uint32_t sig = 0; @@ -551,6 +552,7 @@ x86MakeSignature(unsigned int family, * * family = eax[27:20] + eax[11:8] * model = eax[19:16] << 4 + eax[7:4] + * stepping = eax[3:0] */ /* extFam */ @@ -570,9 +572,8 @@ x86MakeSignature(unsigned int family, /* Mod */ sig |= (model & 0xf) << 4; - /* Step is irrelevant, it is used to distinguish different revisions - * of the same CPU model - */ + /* Step */ + sig |= stepping & 0xf; return sig; } @@ -1248,7 +1249,7 @@ x86ModelParse(xmlXPathContextPtr ctxt, goto cleanup; } - model->signature = x86MakeSignature(sigFamily, sigModel); + model->signature = x86MakeSignature(sigFamily, sigModel, 0); } if (virXPathBoolean("boolean(./vendor)", ctxt)) { @@ -2970,9 +2971,10 @@ virCPUx86DataAddCPUID(virCPUDataPtr cpuData, int virCPUx86DataSetSignature(virCPUDataPtr cpuData, unsigned int family, - unsigned int model) + unsigned int model, + unsigned int stepping) { - uint32_t signature = x86MakeSignature(family, model); + uint32_t signature = x86MakeSignature(family, model, stepping); return x86DataAddSignature(&cpuData->data.x86, signature); } diff --git a/src/cpu/cpu_x86.h b/src/cpu/cpu_x86.h index 91ec43fea9..5d14d83e1b 100644 --- a/src/cpu/cpu_x86.h +++ b/src/cpu/cpu_x86.h @@ -34,7 +34,8 @@ int virCPUx86DataAddCPUID(virCPUDataPtr cpuData, int virCPUx86DataSetSignature(virCPUDataPtr cpuData, unsigned int family, - unsigned int model); + unsigned int model, + unsigned int stepping); int virCPUx86DataSetVendor(virCPUDataPtr cpuData, const char *vendor); diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 63fb4f34e7..8e802ca44e 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3355,6 +3355,7 @@ virQEMUCapsInitCPUModelX86(virQEMUCapsPtr qemuCaps, virCPUDataPtr data = NULL; unsigned long long sigFamily = 0; unsigned long long sigModel = 0; + unsigned long long sigStepping = 0; int ret = -1; size_t i; @@ -3389,6 +3390,8 @@ virQEMUCapsInitCPUModelX86(virQEMUCapsPtr qemuCaps, sigFamily = prop->value.number; else if (STREQ(prop->name, "model")) sigModel = prop->value.number; + else if (STREQ(prop->name, "stepping")) + sigStepping = prop->value.number; break; case QEMU_MONITOR_CPU_PROPERTY_LAST: @@ -3396,7 +3399,7 @@ virQEMUCapsInitCPUModelX86(virQEMUCapsPtr qemuCaps, } } - if (virCPUx86DataSetSignature(data, sigFamily, sigModel) < 0) + if (virCPUx86DataSetSignature(data, sigFamily, sigModel, sigStepping) < 0) goto cleanup; if (cpuDecode(cpu, data, virQEMUCapsGetCPUDefinitions(qemuCaps, type)) < 0) -- 2.14.2

Without the fix in the previous patch the JSON data from QEMU would be interpreted as Haswell-noTSX because x86DataFilterTSX would filter rtm and hle features as a result of family == 6 && model == 63 && stepping < 4 test even though this CPU has stepping == 4. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- tests/cputest.c | 2 +- .../x86_64-cpuid-Xeon-E7-8890-disabled.xml | 6 + .../x86_64-cpuid-Xeon-E7-8890-enabled.xml | 9 + .../cputestdata/x86_64-cpuid-Xeon-E7-8890-json.xml | 14 ++ tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.json | 235 +++++++++++++++++++++ tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.xml | 6 +- 6 files changed, 268 insertions(+), 4 deletions(-) create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-disabled.xml create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-enabled.xml create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-json.xml create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.json diff --git a/tests/cputest.c b/tests/cputest.c index 6b48956c4d..ff54182696 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -1150,7 +1150,7 @@ mymain(void) DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E5-2650", JSON_HOST); DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E7-4820", JSON_HOST); DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E7-4830", JSON_MODELS); - DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E7-8890", JSON_NONE); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E7-8890", JSON_HOST); DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-Gold-6148", JSON_HOST); DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-W3520", JSON_HOST); DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-X5460", JSON_NONE); diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-disabled.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-disabled.xml new file mode 100644 index 0000000000..aacc7a2b14 --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-disabled.xml @@ -0,0 +1,6 @@ +<!-- Features disabled by QEMU --> +<cpudata arch='x86'> + <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x0804c1fc' edx='0xb0600000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x00001000' ecx='0x00000000' edx='0x00000000'/> + <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/> +</cpudata> diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-enabled.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-enabled.xml new file mode 100644 index 0000000000..026a049f77 --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-enabled.xml @@ -0,0 +1,9 @@ +<!-- Features enabled by QEMU --> +<cpudata arch='x86'> + <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0xf7fa3203' edx='0x0f8bfbff'/> + <cpuid eax_in='0x00000006' ecx_in='0x00' eax='0x00000004' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000fbb' ecx='0x00000000' edx='0x00000000'/> + <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x00000001' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/> + <cpuid eax_in='0x40000001' ecx_in='0x00' eax='0x010000fa' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/> + <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000021' edx='0x2c100800'/> +</cpudata> diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-json.xml new file mode 100644 index 0000000000..e542456c8b --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-json.xml @@ -0,0 +1,14 @@ +<cpu mode='custom' match='exact'> + <model fallback='forbid'>Haswell</model> + <vendor>Intel</vendor> + <feature policy='require' name='vme'/> + <feature policy='require' name='ss'/> + <feature policy='require' name='f16c'/> + <feature policy='require' name='rdrand'/> + <feature policy='require' name='hypervisor'/> + <feature policy='require' name='arat'/> + <feature policy='require' name='tsc_adjust'/> + <feature policy='require' name='xsaveopt'/> + <feature policy='require' name='pdpe1gb'/> + <feature policy='require' name='abm'/> +</cpu> diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.json b/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.json new file mode 100644 index 0000000000..d227a7af61 --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.json @@ -0,0 +1,235 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": true, + "tsc_adjust": true, + "tsc-deadline": true, + "xstore-en": false, + "cpuid-0xb": true, + "abm": true, + "ia64": false, + "kvm-mmu": false, + "xsaveopt": true, + "hv-spinlocks": -1, + "tce": false, + "realized": false, + "kvm_steal_time": true, + "smep": true, + "fpu": true, + "xcrypt": false, + "sse4_2": true, + "clflush": true, + "sse4_1": true, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": false, + "fxsr": true, + "sha-ni": false, + "decodeassists": false, + "hv-relaxed": false, + "pclmuldq": true, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "tsc-adjust": true, + "vme": true, + "vendor": "GenuineIntel", + "arat": true, + "ffxsr": false, + "de": true, + "aes": true, + "pse": true, + "ds-cpl": false, + "fxsr_opt": false, + "tbm": false, + "sse": true, + "phe-en": false, + "f16c": true, + "ds": false, + "mpx": false, + "vmware-cpuid-freq": true, + "avx512f": false, + "avx2": true, + "level": 13, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": true, + "perfctr-nb": false, + "nrip_save": false, + "kvm_mmu": false, + "ospke": false, + "pmu": false, + "avx512ifma": false, + "stepping": 4, + "sep": true, + "sse4a": false, + "avx512dq": false, + "core-id": -1, + "i64": true, + "avx512-4vnniw": false, + "xsave": true, + "pmm": false, + "hle": true, + "nodeid_msr": false, + "hv-crash": false, + "est": false, + "osxsave": false, + "xop": false, + "smx": false, + "tsc-scale": false, + "monitor": false, + "avx512er": false, + "apic": true, + "sse4.1": true, + "sse4.2": true, + "hv-vapic": false, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": false, + "acpi": false, + "fma4": false, + "mmx": true, + "svm_lock": false, + "pcommit": false, + "mtrr": true, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hv-time": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "xlevel": 2147483656, + "lahf_lm": true, + "enforce": false, + "pcid": true, + "sse4-1": true, + "lbrv": false, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "fill-mtrr-mask": true, + "pause_filter": false, + "svm-lock": false, + "popcnt": true, + "nrip-save": false, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "smap": false, + "pdpe1gb": true, + "family": 6, + "min-level": 13, + "xlevel2": 0, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "l3-cache": true, + "nx": true, + "lwp": false, + "msr": true, + "syscall": true, + "tm": false, + "perfctr-core": false, + "memory": "/machine/unattached/system[0]", + "pge": true, + "pn": false, + "fma": true, + "nodeid-msr": false, + "xsavec": false, + "socket-id": -1, + "thread-id": -1, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": false, + "mca": true, + "avx512pf": false, + "pni": true, + "hv-vendor-id": "", + "rdseed": false, + "osvw": false, + "fsgsbase": true, + "model-id": "Intel(R) Xeon(R) CPU E7-8890 v3 @ 2.50GHz", + "cmp-legacy": false, + "kvm-pv-unhalt": true, + "rdtscp": true, + "mmxext": false, + "host-phys-bits": true, + "cid": false, + "vmx": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "min-xlevel": 2147483656, + "ibs": false, + "la57": false, + "avx": true, + "kvm-no-smi-migration": false, + "ace2-en": false, + "umip": false, + "invpcid": true, + "bmi1": true, + "bmi2": true, + "vmcb-clean": false, + "erms": true, + "cmov": true, + "check": true, + "perfctr_core": false, + "misalignsse": false, + "clflushopt": false, + "pat": true, + "sse4-2": true, + "3dnowprefetch": false, + "rdpid": false, + "full-cpuid-auto-level": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr-opt": false, + "kvm_nopiodelay": true, + "phys-bits": 0, + "kvm": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "lmce": false, + "ht": false, + "tsc-frequency": 0, + "kvm-pv-eoi": true, + "npt": false, + "apic-id": 4294967295, + "kvm_asyncpf": true, + "min-xlevel2": 0, + "pclmulqdq": true, + "svm": false, + "sse3": true, + "sse2": true, + "ss": true, + "topoext": false, + "rdrand": true, + "avx512vbmi": false, + "kvm-asyncpf": true, + "xsaves": false, + "model": 63 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.xml index ccdb792193..c249e6ba4a 100644 --- a/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.xml +++ b/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.xml @@ -1,7 +1,7 @@ <!-- Intel(R) Xeon(R) CPU E7-8890 v3 @ 2.50GHz --> <cpudata arch='x86'> <cpuid eax_in='0x00000000' ecx_in='0x00' eax='0x0000000f' ebx='0x756e6547' ecx='0x6c65746e' edx='0x49656e69'/> - <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x000306f4' ebx='0x03400800' ecx='0x7ffefbff' edx='0xbfebfbff'/> + <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x000306f4' ebx='0xc3400800' ecx='0x7ffefbff' edx='0xbfebfbff'/> <cpuid eax_in='0x00000002' ecx_in='0x00' eax='0x76036301' ebx='0x00f0b5ff' ecx='0x00000000' edx='0x00c10000'/> <cpuid eax_in='0x00000003' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/> <cpuid eax_in='0x00000004' ecx_in='0x00' eax='0x7c004121' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/> @@ -14,8 +14,8 @@ <cpuid eax_in='0x00000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/> <cpuid eax_in='0x00000009' ecx_in='0x00' eax='0x00000001' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/> <cpuid eax_in='0x0000000a' ecx_in='0x00' eax='0x07300403' ebx='0x00000000' ecx='0x00000000' edx='0x00000603'/> - <cpuid eax_in='0x0000000b' ecx_in='0x00' eax='0x00000001' ebx='0x00000002' ecx='0x00000100' edx='0x00000003'/> - <cpuid eax_in='0x0000000b' ecx_in='0x01' eax='0x00000006' ebx='0x00000024' ecx='0x00000201' edx='0x00000003'/> + <cpuid eax_in='0x0000000b' ecx_in='0x00' eax='0x00000001' ebx='0x00000002' ecx='0x00000100' edx='0x000000c3'/> + <cpuid eax_in='0x0000000b' ecx_in='0x01' eax='0x00000006' ebx='0x00000024' ecx='0x00000201' edx='0x000000c3'/> <cpuid eax_in='0x0000000c' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/> <cpuid eax_in='0x0000000d' ecx_in='0x00' eax='0x00000007' ebx='0x00000340' ecx='0x00000340' edx='0x00000000'/> <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x00000001' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/> -- 2.14.2

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- tests/cputest.c | 2 +- tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.json | 286 +++++++++++++++++++++++ 2 files changed, 287 insertions(+), 1 deletion(-) diff --git a/tests/cputest.c b/tests/cputest.c index ff54182696..2aedc9043c 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -1150,7 +1150,7 @@ mymain(void) DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E5-2650", JSON_HOST); DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E7-4820", JSON_HOST); DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E7-4830", JSON_MODELS); - DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E7-8890", JSON_HOST); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E7-8890", JSON_MODELS); DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-Gold-6148", JSON_HOST); DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-W3520", JSON_HOST); DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-X5460", JSON_NONE); diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.json b/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.json index d227a7af61..4b6a9109a9 100644 --- a/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.json +++ b/tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.json @@ -233,3 +233,289 @@ }, "id": "model-expansion" } + +{ + "return": [ + { + "typename": "max-x86_64-cpu", + "unavailable-features": [], + "migration-safe": false, + "static": false, + "name": "max" + }, + { + "typename": "host-x86_64-cpu", + "unavailable-features": [], + "migration-safe": false, + "static": false, + "name": "host" + }, + { + "typename": "base-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": true, + "name": "base" + }, + { + "typename": "qemu64-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "qemu64" + }, + { + "typename": "qemu32-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "qemu32" + }, + { + "typename": "phenom-x86_64-cpu", + "unavailable-features": [ + "mmxext", + "fxsr-opt", + "3dnowext", + "3dnow", + "sse4a", + "npt" + ], + "migration-safe": true, + "static": false, + "name": "phenom" + }, + { + "typename": "pentium3-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "pentium3" + }, + { + "typename": "pentium2-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "pentium2" + }, + { + "typename": "pentium-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "pentium" + }, + { + "typename": "n270-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "n270" + }, + { + "typename": "kvm64-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "kvm64" + }, + { + "typename": "kvm32-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "kvm32" + }, + { + "typename": "cpu64-rhel6-x86_64-cpu", + "unavailable-features": [ + "sse4a" + ], + "migration-safe": true, + "static": false, + "name": "cpu64-rhel6" + }, + { + "typename": "coreduo-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "coreduo" + }, + { + "typename": "core2duo-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "core2duo" + }, + { + "typename": "athlon-x86_64-cpu", + "unavailable-features": [ + "mmxext", + "3dnowext", + "3dnow" + ], + "migration-safe": true, + "static": false, + "name": "athlon" + }, + { + "typename": "Westmere-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "Westmere" + }, + { + "typename": "Skylake-Client-x86_64-cpu", + "unavailable-features": [ + "mpx", + "rdseed", + "adx", + "smap", + "3dnowprefetch", + "xsavec", + "xgetbv1", + "mpx", + "mpx" + ], + "migration-safe": true, + "static": false, + "name": "Skylake-Client" + }, + { + "typename": "SandyBridge-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "SandyBridge" + }, + { + "typename": "Penryn-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "Penryn" + }, + { + "typename": "Opteron_G5-x86_64-cpu", + "unavailable-features": [ + "sse4a", + "misalignsse", + "3dnowprefetch", + "xop", + "fma4", + "tbm" + ], + "migration-safe": true, + "static": false, + "name": "Opteron_G5" + }, + { + "typename": "Opteron_G4-x86_64-cpu", + "unavailable-features": [ + "sse4a", + "misalignsse", + "3dnowprefetch", + "xop", + "fma4" + ], + "migration-safe": true, + "static": false, + "name": "Opteron_G4" + }, + { + "typename": "Opteron_G3-x86_64-cpu", + "unavailable-features": [ + "sse4a", + "misalignsse" + ], + "migration-safe": true, + "static": false, + "name": "Opteron_G3" + }, + { + "typename": "Opteron_G2-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "Opteron_G2" + }, + { + "typename": "Opteron_G1-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "Opteron_G1" + }, + { + "typename": "Nehalem-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "Nehalem" + }, + { + "typename": "IvyBridge-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "IvyBridge" + }, + { + "typename": "Haswell-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "Haswell" + }, + { + "typename": "Haswell-noTSX-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "Haswell-noTSX" + }, + { + "typename": "Conroe-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "Conroe" + }, + { + "typename": "Broadwell-x86_64-cpu", + "unavailable-features": [ + "rdseed", + "adx", + "smap", + "3dnowprefetch" + ], + "migration-safe": true, + "static": false, + "name": "Broadwell" + }, + { + "typename": "Broadwell-noTSX-x86_64-cpu", + "unavailable-features": [ + "rdseed", + "adx", + "smap", + "3dnowprefetch" + ], + "migration-safe": true, + "static": false, + "name": "Broadwell-noTSX" + }, + { + "typename": "486-x86_64-cpu", + "unavailable-features": [], + "migration-safe": true, + "static": false, + "name": "486" + } + ], + "id": "definitions" +} -- 2.14.2

On 10/10/2017 09:14 AM, Jiri Denemark wrote:
Even though only family and model are used for matching CPUID data with CPU models from cpu_map.xml, stepping is used by x86DataFilterTSX which is supposed to disable TSX on CPU models with broken TSX support.
This series applies on top of "Fix host-model if the chosen CPU model has more features in QEMU compared to our cpu_map.xml" series I sent a week ago.
Jiri Denemark (3): qemu: Parse CPU stepping from query-cpu-model-expansion cputest: Update Xeon-E7-8890 data cputest: Add query-cpu-definitions reply for Xeon-E7-8890
src/cpu/cpu_x86.c | 16 +- src/cpu/cpu_x86.h | 3 +- src/qemu/qemu_capabilities.c | 5 +- tests/cputest.c | 2 +- .../x86_64-cpuid-Xeon-E7-8890-disabled.xml | 6 + .../x86_64-cpuid-Xeon-E7-8890-enabled.xml | 9 + .../cputestdata/x86_64-cpuid-Xeon-E7-8890-json.xml | 14 + tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.json | 521 +++++++++++++++++++++ tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.xml | 6 +- 9 files changed, 569 insertions(+), 13 deletions(-) create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-disabled.xml create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-enabled.xml create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-json.xml create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.json
Reviewed-by: John Ferlan <jferlan@redhat.com> (series) John

On Tue, Oct 17, 2017 at 16:23:49 -0400, John Ferlan wrote:
On 10/10/2017 09:14 AM, Jiri Denemark wrote:
Even though only family and model are used for matching CPUID data with CPU models from cpu_map.xml, stepping is used by x86DataFilterTSX which is supposed to disable TSX on CPU models with broken TSX support.
This series applies on top of "Fix host-model if the chosen CPU model has more features in QEMU compared to our cpu_map.xml" series I sent a week ago.
Jiri Denemark (3): qemu: Parse CPU stepping from query-cpu-model-expansion cputest: Update Xeon-E7-8890 data cputest: Add query-cpu-definitions reply for Xeon-E7-8890
src/cpu/cpu_x86.c | 16 +- src/cpu/cpu_x86.h | 3 +- src/qemu/qemu_capabilities.c | 5 +- tests/cputest.c | 2 +- .../x86_64-cpuid-Xeon-E7-8890-disabled.xml | 6 + .../x86_64-cpuid-Xeon-E7-8890-enabled.xml | 9 + .../cputestdata/x86_64-cpuid-Xeon-E7-8890-json.xml | 14 + tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.json | 521 +++++++++++++++++++++ tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.xml | 6 +- 9 files changed, 569 insertions(+), 13 deletions(-) create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-disabled.xml create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-enabled.xml create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-json.xml create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-8890.json
Reviewed-by: John Ferlan <jferlan@redhat.com> (series)
Pushed, thanks. Jirka
participants (2)
-
Jiri Denemark
-
John Ferlan