[libvirt PATCH] cpu_map: Add EPYC-Rome model

Markus Schade posted 1 patch 3 years, 7 months ago
Test syntax-check failed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20200928111722.182546-1-markus.schade@hetzner.com
There is a newer version of this series
src/cpu_map/index.xml                         |    1 +
src/cpu_map/meson.build                       |    1 +
src/cpu_map/x86_EPYC-Rome.xml                 |   81 +
tests/cputest.c                               |    1 +
...86_64-cpuid-EPYC-7502-32-Core-disabled.xml |    9 +
...x86_64-cpuid-EPYC-7502-32-Core-enabled.xml |   11 +
.../x86_64-cpuid-EPYC-7502-32-Core-guest.xml  |   35 +
.../x86_64-cpuid-EPYC-7502-32-Core-host.xml   |   36 +
.../x86_64-cpuid-EPYC-7502-32-Core-json.xml   |   24 +
.../x86_64-cpuid-EPYC-7502-32-Core.json       | 1910 +++++++++++++++++
.../x86_64-cpuid-EPYC-7502-32-Core.sig        |    4 +
.../x86_64-cpuid-EPYC-7502-32-Core.xml        |   66 +
...4-cpuid-Ryzen-9-3900X-12-Core-disabled.xml |    1 -
...64-cpuid-Ryzen-9-3900X-12-Core-enabled.xml |    2 +-
...6_64-cpuid-Ryzen-9-3900X-12-Core-guest.xml |    9 +-
...86_64-cpuid-Ryzen-9-3900X-12-Core-host.xml |    9 +-
...86_64-cpuid-Ryzen-9-3900X-12-Core-json.xml |    8 +-
.../x86_64-cpuid-Ryzen-9-3900X-12-Core.json   |   23 +
.../x86_64-cpuid-Ryzen-9-3900X-12-Core.xml    |   12 +-
19 files changed, 2212 insertions(+), 31 deletions(-)
create mode 100644 src/cpu_map/x86_EPYC-Rome.xml
create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-disabled.xml
create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-enabled.xml
create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml
create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml
create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml
create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.json
create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.sig
create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.xml
[libvirt PATCH] cpu_map: Add EPYC-Rome model
Posted by Markus Schade 3 years, 7 months ago
Signed-off-by: Markus Schade <markus.schade@hetzner.com>
---
 src/cpu_map/index.xml                         |    1 +
 src/cpu_map/meson.build                       |    1 +
 src/cpu_map/x86_EPYC-Rome.xml                 |   81 +
 tests/cputest.c                               |    1 +
 ...86_64-cpuid-EPYC-7502-32-Core-disabled.xml |    9 +
 ...x86_64-cpuid-EPYC-7502-32-Core-enabled.xml |   11 +
 .../x86_64-cpuid-EPYC-7502-32-Core-guest.xml  |   35 +
 .../x86_64-cpuid-EPYC-7502-32-Core-host.xml   |   36 +
 .../x86_64-cpuid-EPYC-7502-32-Core-json.xml   |   24 +
 .../x86_64-cpuid-EPYC-7502-32-Core.json       | 1910 +++++++++++++++++
 .../x86_64-cpuid-EPYC-7502-32-Core.sig        |    4 +
 .../x86_64-cpuid-EPYC-7502-32-Core.xml        |   66 +
 ...4-cpuid-Ryzen-9-3900X-12-Core-disabled.xml |    1 -
 ...64-cpuid-Ryzen-9-3900X-12-Core-enabled.xml |    2 +-
 ...6_64-cpuid-Ryzen-9-3900X-12-Core-guest.xml |    9 +-
 ...86_64-cpuid-Ryzen-9-3900X-12-Core-host.xml |    9 +-
 ...86_64-cpuid-Ryzen-9-3900X-12-Core-json.xml |    8 +-
 .../x86_64-cpuid-Ryzen-9-3900X-12-Core.json   |   23 +
 .../x86_64-cpuid-Ryzen-9-3900X-12-Core.xml    |   12 +-
 19 files changed, 2212 insertions(+), 31 deletions(-)
 create mode 100644 src/cpu_map/x86_EPYC-Rome.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-disabled.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-enabled.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.json
 create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.xml

diff --git a/src/cpu_map/index.xml b/src/cpu_map/index.xml
index 1486a29c65..fec01f324c 100644
--- a/src/cpu_map/index.xml
+++ b/src/cpu_map/index.xml
@@ -66,6 +66,7 @@
     <include filename="x86_Opteron_G5.xml"/>
     <include filename="x86_EPYC.xml"/>
     <include filename="x86_EPYC-IBPB.xml"/>
+    <include filename="x86_EPYC-Rome.xml"/>
 
     <!-- Hygon CPU models -->
     <include filename="x86_Dhyana.xml"/>
diff --git a/src/cpu_map/meson.build b/src/cpu_map/meson.build
index 19daa7157b..b86612b6e0 100644
--- a/src/cpu_map/meson.build
+++ b/src/cpu_map/meson.build
@@ -32,6 +32,7 @@ cpumap_data = [
   'x86_Dhyana.xml',
   'x86_EPYC-IBPB.xml',
   'x86_EPYC.xml',
+  'x86_EPYC-Rome.xml',
   'x86_features.xml',
   'x86_Haswell-IBRS.xml',
   'x86_Haswell-noTSX-IBRS.xml',
diff --git a/src/cpu_map/x86_EPYC-Rome.xml b/src/cpu_map/x86_EPYC-Rome.xml
new file mode 100644
index 0000000000..41d4123917
--- /dev/null
+++ b/src/cpu_map/x86_EPYC-Rome.xml
@@ -0,0 +1,81 @@
+<cpus>
+  <model name='EPYC-Rome'>
+    <decode host='on' guest='on'/>
+    <signature family='23' model='49'/>
+    <vendor name='AMD'/>
+    <feature name='3dnowprefetch'/>
+    <feature name='abm'/>
+    <feature name='adx'/>
+    <feature name='aes'/>
+    <feature name='amd-stibp'/>
+    <feature name='apic'/>
+    <feature name='arat'/>
+    <feature name='avx'/>
+    <feature name='avx2'/>
+    <feature name='bmi1'/>
+    <feature name='bmi2'/>
+    <feature name='clflush'/>
+    <feature name='clflushopt'/>
+    <feature name='clwb'/>
+    <feature name='clzero'/>
+    <feature name='cmov'/>
+    <feature name='cr8legacy'/>
+    <feature name='cx16'/>
+    <feature name='cx8'/>
+    <feature name='de'/>
+    <feature name='f16c'/>
+    <feature name='fma'/>
+    <feature name='fpu'/>
+    <feature name='fsgsbase'/>
+    <feature name='fxsr'/>
+    <feature name='fxsr_opt'/>
+    <feature name='ibpb'/>
+    <feature name='lahf_lm'/>
+    <feature name='lm'/>
+    <feature name='mca'/>
+    <feature name='mce'/>
+    <feature name='misalignsse'/>
+    <feature name='mmx'/>
+    <feature name='mmxext'/>
+    <feature name='monitor'/>
+    <feature name='movbe'/>
+    <feature name='msr'/>
+    <feature name='mtrr'/>
+    <feature name='nx'/>
+    <feature name='osvw'/>
+    <feature name='pae'/>
+    <feature name='pat'/>
+    <feature name='pclmuldq'/>
+    <feature name='pdpe1gb'/>
+    <feature name='perfctr_core'/>
+    <feature name='pge'/>
+    <feature name='pni'/>
+    <feature name='popcnt'/>
+    <feature name='pse'/>
+    <feature name='pse36'/>
+    <feature name='rdpid'/>
+    <feature name='rdrand'/>
+    <feature name='rdseed'/>
+    <feature name='rdtscp'/>
+    <feature name='sep'/>
+    <feature name='sha-ni'/>
+    <feature name='smap'/>
+    <feature name='smep'/>
+    <feature name='sse'/>
+    <feature name='sse2'/>
+    <feature name='sse4.1'/>
+    <feature name='sse4.2'/>
+    <feature name='sse4a'/>
+    <feature name='ssse3'/>
+    <feature name='svm'/>
+    <feature name='syscall'/>
+    <feature name='tsc'/>
+    <feature name='vme'/>
+    <feature name='wbnoinvd'/>
+    <feature name='xgetbv1'/>
+    <feature name='xsave'/>
+    <feature name='xsavec'/>
+    <feature name='xsaveerptr'/>
+    <feature name='xsaveopt'/>
+  </model>
+</cpus>
diff --git a/tests/cputest.c b/tests/cputest.c
index 383da94938..53674f2b9a 100644
--- a/tests/cputest.c
+++ b/tests/cputest.c
@@ -1244,6 +1244,7 @@ mymain(void)
     DO_TEST_CPUID(VIR_ARCH_X86_64, "Hygon-C86-7185-32-core", JSON_HOST);
     DO_TEST_CPUID(VIR_ARCH_X86_64, "EPYC-7601-32-Core", JSON_HOST);
     DO_TEST_CPUID(VIR_ARCH_X86_64, "EPYC-7601-32-Core-ibpb", JSON_MODELS_REQUIRED);
+    DO_TEST_CPUID(VIR_ARCH_X86_64, "EPYC-7502-32-Core", JSON_MODELS);
     DO_TEST_CPUID(VIR_ARCH_X86_64, "FX-8150", JSON_NONE);
     DO_TEST_CPUID(VIR_ARCH_X86_64, "Opteron-1352", JSON_NONE);
     DO_TEST_CPUID(VIR_ARCH_X86_64, "Opteron-2350", JSON_HOST);
diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-disabled.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-disabled.xml
new file mode 100644
index 0000000000..ca71b9efb5
--- /dev/null
+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-disabled.xml
@@ -0,0 +1,9 @@
+<!-- Features disabled by QEMU -->
+<cpudata arch='x86'>
+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x08000008' edx='0x10000000'/>
+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x00001000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x0000000f' ecx_in='0x01' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000006'/>
+  <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01423408' edx='0x00000000'/>
+  <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x000014f6'/>
+</cpudata>
diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-enabled.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-enabled.xml
new file mode 100644
index 0000000000..09a9952c27
--- /dev/null
+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-enabled.xml
@@ -0,0 +1,11 @@
+<!-- Features enabled by QEMU -->
+<cpudata arch='x86'>
+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0xf7f83203' edx='0x078bfbff'/>
+  <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='0x219c01ab' ecx='0x00400004' edx='0xac000000'/>
+  <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x008003f7' edx='0x2e500800'/>
+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x03009205' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000009'/>
+  <msr index='0x10a' edx='0x00000000' eax='0x00000069'/>
+</cpudata>
diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml
new file mode 100644
index 0000000000..a49ef46f52
--- /dev/null
+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml
@@ -0,0 +1,35 @@
+<cpu mode='custom' match='exact'>
+  <model fallback='forbid'>EPYC-Rome</model>
+  <vendor>AMD</vendor>
+  <feature policy='require' name='ht'/>
+  <feature policy='require' name='osxsave'/>
+  <feature policy='require' name='cmt'/>
+  <feature policy='require' name='umip'/>
+  <feature policy='require' name='xsaves'/>
+  <feature policy='require' name='mbm_total'/>
+  <feature policy='require' name='mbm_local'/>
+  <feature policy='require' name='cmp_legacy'/>
+  <feature policy='require' name='extapic'/>
+  <feature policy='require' name='ibs'/>
+  <feature policy='require' name='skinit'/>
+  <feature policy='require' name='wdt'/>
+  <feature policy='require' name='tce'/>
+  <feature policy='require' name='topoext'/>
+  <feature policy='require' name='perfctr_nb'/>
+  <feature policy='require' name='invtsc'/>
+  <feature policy='require' name='amd-ssbd'/>
+  <feature policy='require' name='npt'/>
+  <feature policy='require' name='lbrv'/>
+  <feature policy='require' name='svm-lock'/>
+  <feature policy='require' name='nrip-save'/>
+  <feature policy='require' name='tsc-scale'/>
+  <feature policy='require' name='vmcb-clean'/>
+  <feature policy='require' name='flushbyasid'/>
+  <feature policy='require' name='decodeassists'/>
+  <feature policy='require' name='pause-filter'/>
+  <feature policy='require' name='pfthreshold'/>
+  <feature policy='require' name='rdctl-no'/>
+  <feature policy='require' name='skip-l1dfl-vmentry'/>
+  <feature policy='require' name='mds-no'/>
+  <feature policy='require' name='pschange-mc-no'/>
+</cpu>
diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml
new file mode 100644
index 0000000000..e9aea3339a
--- /dev/null
+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml
@@ -0,0 +1,36 @@
+<cpu>
+  <arch>x86_64</arch>
+  <model>EPYC-Rome</model>
+  <vendor>AMD</vendor>
+  <feature name='ht'/>
+  <feature name='osxsave'/>
+  <feature name='cmt'/>
+  <feature name='umip'/>
+  <feature name='xsaves'/>
+  <feature name='mbm_total'/>
+  <feature name='mbm_local'/>
+  <feature name='cmp_legacy'/>
+  <feature name='extapic'/>
+  <feature name='ibs'/>
+  <feature name='skinit'/>
+  <feature name='wdt'/>
+  <feature name='tce'/>
+  <feature name='topoext'/>
+  <feature name='perfctr_nb'/>
+  <feature name='invtsc'/>
+  <feature name='amd-ssbd'/>
+  <feature name='npt'/>
+  <feature name='lbrv'/>
+  <feature name='svm-lock'/>
+  <feature name='nrip-save'/>
+  <feature name='tsc-scale'/>
+  <feature name='vmcb-clean'/>
+  <feature name='flushbyasid'/>
+  <feature name='decodeassists'/>
+  <feature name='pause-filter'/>
+  <feature name='pfthreshold'/>
+  <feature name='rdctl-no'/>
+  <feature name='skip-l1dfl-vmentry'/>
+  <feature name='mds-no'/>
+  <feature name='pschange-mc-no'/>
+</cpu>
diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml
new file mode 100644
index 0000000000..e402b77eed
--- /dev/null
+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml
@@ -0,0 +1,24 @@
+<cpu mode='custom' match='exact'>
+  <model fallback='forbid'>EPYC-Rome</model>
+  <vendor>AMD</vendor>
+  <feature policy='require' name='x2apic'/>
+  <feature policy='require' name='tsc-deadline'/>
+  <feature policy='require' name='hypervisor'/>
+  <feature policy='require' name='tsc_adjust'/>
+  <feature policy='require' name='umip'/>
+  <feature policy='require' name='spec-ctrl'/>
+  <feature policy='require' name='stibp'/>
+  <feature policy='require' name='arch-capabilities'/>
+  <feature policy='require' name='ssbd'/>
+  <feature policy='require' name='xsaves'/>
+  <feature policy='require' name='cmp_legacy'/>
+  <feature policy='require' name='amd-ssbd'/>
+  <feature policy='require' name='virt-ssbd'/>
+  <feature policy='require' name='npt'/>
+  <feature policy='require' name='nrip-save'/>
+  <feature policy='require' name='rdctl-no'/>
+  <feature policy='require' name='skip-l1dfl-vmentry'/>
+  <feature policy='require' name='mds-no'/>
+  <feature policy='require' name='pschange-mc-no'/>
+  <feature policy='disable' name='monitor'/>
+</cpu>
diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.json b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.json
new file mode 100644
index 0000000000..7942096dad
--- /dev/null
+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.json
@@ -0,0 +1,1910 @@
+{
+  "return": {
+    "model": {
+      "name": "base",
+      "props": {
+        "phys-bits": 0,
+        "vmx-entry-load-rtit-ctl": false,
+        "core-id": -1,
+        "xlevel": 2147483679,
+        "cmov": true,
+        "ia64": false,
+        "ssb-no": false,
+        "aes": true,
+        "vmx-apicv-xapic": false,
+        "mmx": true,
+        "arat": true,
+        "rdpid": true,
+        "vmx-page-walk-5": false,
+        "vmx-page-walk-4": false,
+        "vmx-desc-exit": false,
+        "gfni": false,
+        "ibrs-all": false,
+        "pause-filter": false,
+        "xsavec": true,
+        "intel-pt": false,
+        "vmx-cr8-store-exit": false,
+        "hv-frequencies": false,
+        "tsc-frequency": 0,
+        "vmx-rdseed-exit": false,
+        "xd": true,
+        "x-intel-pt-auto-level": true,
+        "hv-vendor-id": "",
+        "vmx-eptp-switching": false,
+        "kvm_asyncpf": true,
+        "kvm-asyncpf": true,
+        "perfctr_core": true,
+        "perfctr-core": true,
+        "mpx": false,
+        "avx512cd": false,
+        "pbe": false,
+        "decodeassists": false,
+        "vmx-exit-clear-bndcfgs": false,
+        "vmx-exit-load-efer": false,
+        "sse4_1": true,
+        "sse4-1": true,
+        "sse4.1": true,
+        "legacy-cache": true,
+        "family": 23,
+        "vmx-vmwrite-vmexit-fields": false,
+        "vmx-vnmi": false,
+        "vmx-true-ctls": false,
+        "host-phys-bits-limit": 0,
+        "vmx-ept-execonly": false,
+        "vmx-exit-save-efer": false,
+        "vmx-invept-all-context": false,
+        "vmware-cpuid-freq": true,
+        "wbnoinvd": true,
+        "avx512f": false,
+        "hv-runtime": false,
+        "hv-stimer-direct": false,
+        "xcrypt": false,
+        "mce": true,
+        "mca": true,
+        "msr": true,
+        "thread-id": -1,
+        "vmx-exit-load-pat": false,
+        "vmx-intr-exit": false,
+        "min-level": 16,
+        "vmx-flexpriority": false,
+        "xgetbv1": true,
+        "cid": false,
+        "hv-relaxed": false,
+        "hv-crash": false,
+        "avx512-bf16": false,
+        "ds": false,
+        "fxsr": true,
+        "vmx-cr8-load-exit": false,
+        "xsaveopt": true,
+        "vmx-apicv-vid": false,
+        "vmx-exit-save-pat": false,
+        "tsx-ctrl": false,
+        "xtpr": false,
+        "vmx-ple": false,
+        "hv-evmcs": false,
+        "avx512-vpopcntdq": false,
+        "phe": false,
+        "avx512vl": false,
+        "extapic": false,
+        "vmx-vmfunc": false,
+        "3dnowprefetch": true,
+        "vmx-activity-shutdown": false,
+        "avx512vbmi2": false,
+        "cr8legacy": true,
+        "vmx-encls-exit": false,
+        "stibp": true,
+        "vmx-msr-bitmap": false,
+        "cpuid-0xb": true,
+        "xcrypt-en": false,
+        "vmx-mwait-exit": false,
+        "kvm_pv_eoi": true,
+        "vmx-pml": false,
+        "apic-id": 4294967295,
+        "vmx-nmi-exit": false,
+        "vmx-invept-single-context-noglobals": false,
+        "pn": false,
+        "rsba": false,
+        "dca": false,
+        "hv-ipi": false,
+        "vmx-unrestricted-guest": false,
+        "vendor": "AuthenticAMD",
+        "vmx-cr3-store-noexit": false,
+        "pku": false,
+        "smx": false,
+        "cmp-legacy": true,
+        "cmp_legacy": true,
+        "node-id": -1,
+        "avx512-4fmaps": false,
+        "vmcb_clean": false,
+        "vmcb-clean": false,
+        "hle": false,
+        "amd-no-ssb": false,
+        "3dnowext": false,
+        "npt": true,
+        "rdctl-no": true,
+        "vmx-invvpid": false,
+        "memory": "/machine/unattached/system[0]",
+        "clwb": true,
+        "lbrv": false,
+        "adx": true,
+        "ss": false,
+        "pni": true,
+        "svm_lock": false,
+        "svm-lock": false,
+        "pfthreshold": false,
+        "smap": true,
+        "smep": true,
+        "vmx-invpcid-exit": false,
+        "x2apic": true,
+        "avx512vnni": false,
+        "avx512vbmi": false,
+        "vmx-apicv-x2apic": false,
+        "hv-stimer": false,
+        "kvm-pv-sched-yield": true,
+        "x-hv-synic-kvm-only": false,
+        "vmx-invlpg-exit": false,
+        "vmx-invvpid-all-context": false,
+        "i64": true,
+        "vmx-activity-hlt": false,
+        "flushbyasid": false,
+        "f16c": true,
+        "vmx-exit-ack-intr": false,
+        "ace2-en": false,
+        "pae": true,
+        "pat": true,
+        "sse": true,
+        "die-id": -1,
+        "vmx-tsc-offset": false,
+        "phe-en": false,
+        "kvm_nopiodelay": true,
+        "kvm-nopiodelay": true,
+        "tm": false,
+        "kvmclock-stable-bit": true,
+        "vmx-rdtsc-exit": false,
+        "hypervisor": true,
+        "vmx-rdtscp-exit": false,
+        "socket-id": -1,
+        "mds-no": true,
+        "pcommit": false,
+        "vmx-vpid": false,
+        "syscall": true,
+        "level": 16,
+        "x-migrate-smi-count": true,
+        "avx512dq": false,
+        "svm": true,
+        "full-cpuid-auto-level": true,
+        "hv-reset": false,
+        "invtsc": false,
+        "vmx-monitor-exit": false,
+        "sse3": true,
+        "sse2": true,
+        "ssbd": true,
+        "vmx-wbinvd-exit": false,
+        "est": false,
+        "kvm-poll-control": true,
+        "kvm_poll_control": true,
+        "avx512ifma": false,
+        "tm2": false,
+        "kvm-pv-eoi": true,
+        "kvm-pv-ipi": true,
+        "cx8": true,
+        "vmx-invvpid-single-addr": false,
+        "waitpkg": false,
+        "cldemote": false,
+        "vmx-ept": 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": false,
+        "vmx-entry-load-bndcfgs": false,
+        "nodeid_msr": false,
+        "pdcm": false,
+        "vmx-exit-clear-rtit-ctl": false,
+        "model": 49,
+        "movbe": true,
+        "nrip_save": true,
+        "nrip-save": true,
+        "vmx-pause-exit": false,
+        "ssse3": true,
+        "kvm_pv_unhalt": true,
+        "sse4a": true,
+        "invpcid": false,
+        "pdpe1gb": true,
+        "tsc-deadline": true,
+        "skip-l1dfl-vmentry": true,
+        "vmx-exit-load-perf-global-ctrl": false,
+        "fma": true,
+        "cx16": true,
+        "de": true,
+        "enforce": false,
+        "stepping": 0,
+        "xsave": true,
+        "clflush": true,
+        "skinit": false,
+        "tsc": true,
+        "tce": false,
+        "fpu": true,
+        "ds-cpl": false,
+        "ds_cpl": false,
+        "ibs": false,
+        "host-phys-bits": false,
+        "fma4": false,
+        "vmx-exit-nosave-debugctl": false,
+        "vmx-invept": false,
+        "la57": false,
+        "osvw": true,
+        "check": true,
+        "hv-spinlocks": 4294967295,
+        "pmu": false,
+        "vmx-eptad": false,
+        "vmx-entry-noload-debugctl": false,
+        "pmm": false,
+        "apic": true,
+        "spec-ctrl": true,
+        "vmx-posted-intr": false,
+        "vmx-apicv-register": false,
+        "min-xlevel2": 0,
+        "tsc-adjust": true,
+        "tsc_adjust": true,
+        "kvm-steal-time": true,
+        "kvm_steal_time": true,
+        "kvmclock": true,
+        "vmx-zero-len-inject": false,
+        "l3-cache": true,
+        "pschange-mc-no": true,
+        "vmx-rdrand-exit": false,
+        "lwp": false,
+        "hv-passthrough": false,
+        "amd-ssbd": true,
+        "ibpb": true,
+        "xop": false,
+        "core-capability": false,
+        "avx": true,
+        "vmx-invept-single-context": false,
+        "movdiri": false,
+        "avx512bw": false,
+        "acpi": false,
+        "ace2": false,
+        "hv-vapic": false,
+        "fsgsbase": true,
+        "vmx-ept-1gb": false,
+        "vmx-ept-2mb": false,
+        "ht": false,
+        "vmx-io-exit": false,
+        "nx": true,
+        "pclmulqdq": true,
+        "mmxext": true,
+        "popcnt": true,
+        "vaes": false,
+        "xsaves": true,
+        "movdir64b": false,
+        "tcg-cpuid": true,
+        "vmx-shadow-vmcs": false,
+        "lm": true,
+        "vmx-exit-save-preemption-timer": false,
+        "vmx-entry-load-pat": false,
+        "vmx-entry-load-perf-global-ctrl": false,
+        "vmx-io-bitmap": false,
+        "vmx-store-lma": false,
+        "umip": true,
+        "vmx-movdr-exit": false,
+        "avx2": true,
+        "pse": true,
+        "pclmuldq": true,
+        "sep": true,
+        "vmx-cr3-load-noexit": false,
+        "virt-ssbd": true,
+        "x-hv-max-vps": -1,
+        "nodeid-msr": false,
+        "md-clear": false,
+        "kvm": true,
+        "split-lock-detect": false,
+        "misalignsse": true,
+        "min-xlevel": 2147483679,
+        "realized": false,
+        "kvm-pv-unhalt": true,
+        "bmi2": true,
+        "bmi1": true,
+        "tsc_scale": false,
+        "tsc-scale": false,
+        "topoext": false,
+        "hv-vpindex": false,
+        "hv-no-nonarch-coresharing": "off",
+        "amd-stibp": true,
+        "ucode-rev": 0,
+        "vmx-preemption-timer": false,
+        "xlevel2": 0,
+        "clflushopt": true,
+        "vmx-vnmi-pending": false,
+        "kvm-no-smi-migration": false,
+        "monitor": false,
+        "vmx-vintr-pending": false,
+        "avx512er": false,
+        "pmm-en": false,
+        "taa-no": false,
+        "pcid": false,
+        "vmx-secondary-ctls": false,
+        "arch-capabilities": true,
+        "vmx-xsaves": false,
+        "clzero": true,
+        "3dnow": false,
+        "erms": false,
+        "x-force-features": false,
+        "vmx-entry-ia32e-mode": false,
+        "lahf-lm": true,
+        "lahf_lm": true,
+        "vmx-ins-outs": false,
+        "vpclmulqdq": false,
+        "hv-synic": false,
+        "xstore": false,
+        "fxsr-opt": true,
+        "fxsr_opt": true,
+        "rtm": false,
+        "kvm-hint-dedicated": false,
+        "lmce": false,
+        "hv-time": false,
+        "perfctr_nb": false,
+        "perfctr-nb": false,
+        "hv-tlbflush": false,
+        "ffxsr": true,
+        "rdrand": true,
+        "rdseed": true,
+        "avx512-4vnniw": false,
+        "vme": true,
+        "vmx": false,
+        "dtes64": false,
+        "mtrr": true,
+        "rdtscp": true,
+        "xsaveerptr": true,
+        "pse36": true,
+        "kvm-pv-tlb-flush": true,
+        "vmx-activity-wait-sipi": false,
+        "tbm": false,
+        "vmx-rdpmc-exit": false,
+        "wdt": false,
+        "level-func7": 0,
+        "vmx-entry-load-efer": false,
+        "vmx-mtf": false,
+        "pause_filter": false,
+        "model-id": "AMD EPYC 7502 32-Core Processor                ",
+        "sha-ni": true,
+        "abm": true,
+        "vmx-ept-advanced-exitinfo": false,
+        "avx512pf": false,
+        "vmx-hlt-exit": 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": [],
+      "alias-of": "qemu64-v1",
+      "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": [],
+      "alias-of": "qemu32-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "phenom-v1",
+      "typename": "phenom-v1-x86_64-cpu",
+      "unavailable-features": [
+        "3dnowext",
+        "3dnow"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "phenom",
+      "typename": "phenom-x86_64-cpu",
+      "unavailable-features": [
+        "3dnowext",
+        "3dnow"
+      ],
+      "alias-of": "phenom-v1",
+      "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": [],
+      "alias-of": "pentium3-v1",
+      "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": [],
+      "alias-of": "pentium2-v1",
+      "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": [],
+      "alias-of": "pentium-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "n270-v1",
+      "typename": "n270-v1-x86_64-cpu",
+      "unavailable-features": [
+        "ss"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "n270",
+      "typename": "n270-x86_64-cpu",
+      "unavailable-features": [
+        "ss"
+      ],
+      "alias-of": "n270-v1",
+      "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": [],
+      "alias-of": "kvm64-v1",
+      "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": [],
+      "alias-of": "kvm32-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "coreduo-v1",
+      "typename": "coreduo-v1-x86_64-cpu",
+      "unavailable-features": [
+        "ss"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "coreduo",
+      "typename": "coreduo-x86_64-cpu",
+      "unavailable-features": [
+        "ss"
+      ],
+      "alias-of": "coreduo-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "core2duo-v1",
+      "typename": "core2duo-v1-x86_64-cpu",
+      "unavailable-features": [
+        "ss"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "core2duo",
+      "typename": "core2duo-x86_64-cpu",
+      "unavailable-features": [
+        "ss"
+      ],
+      "alias-of": "core2duo-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "athlon-v1",
+      "typename": "athlon-v1-x86_64-cpu",
+      "unavailable-features": [
+        "3dnowext",
+        "3dnow"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "athlon",
+      "typename": "athlon-x86_64-cpu",
+      "unavailable-features": [
+        "3dnowext",
+        "3dnow"
+      ],
+      "alias-of": "athlon-v1",
+      "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": [],
+      "alias-of": "Westmere-v2",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Westmere",
+      "typename": "Westmere-x86_64-cpu",
+      "unavailable-features": [],
+      "alias-of": "Westmere-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Snowridge-v2",
+      "typename": "Snowridge-v2-x86_64-cpu",
+      "unavailable-features": [
+        "erms",
+        "gfni",
+        "cldemote",
+        "movdiri",
+        "movdir64b",
+        "core-capability",
+        "split-lock-detect"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Snowridge-v1",
+      "typename": "Snowridge-v1-x86_64-cpu",
+      "unavailable-features": [
+        "erms",
+        "mpx",
+        "gfni",
+        "cldemote",
+        "movdiri",
+        "movdir64b",
+        "core-capability",
+        "mpx",
+        "mpx",
+        "split-lock-detect"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Snowridge",
+      "typename": "Snowridge-x86_64-cpu",
+      "unavailable-features": [
+        "erms",
+        "mpx",
+        "gfni",
+        "cldemote",
+        "movdiri",
+        "movdir64b",
+        "core-capability",
+        "mpx",
+        "mpx",
+        "split-lock-detect"
+      ],
+      "alias-of": "Snowridge-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Skylake-Server-v3",
+      "typename": "Skylake-Server-v3-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "pku",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Skylake-Server-v2",
+      "typename": "Skylake-Server-v2-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "pku",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Skylake-Server-v1",
+      "typename": "Skylake-Server-v1-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "pku",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Skylake-Server-noTSX-IBRS",
+      "typename": "Skylake-Server-noTSX-IBRS-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "pku",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku"
+      ],
+      "alias-of": "Skylake-Server-v3",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Skylake-Server-IBRS",
+      "typename": "Skylake-Server-IBRS-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "pku",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku"
+      ],
+      "alias-of": "Skylake-Server-v2",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Skylake-Server",
+      "typename": "Skylake-Server-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "pku",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku"
+      ],
+      "alias-of": "Skylake-Server-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Skylake-Client-v3",
+      "typename": "Skylake-Client-v3-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Skylake-Client-v2",
+      "typename": "Skylake-Client-v2-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Skylake-Client-v1",
+      "typename": "Skylake-Client-v1-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Skylake-Client-noTSX-IBRS",
+      "typename": "Skylake-Client-noTSX-IBRS-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid"
+      ],
+      "alias-of": "Skylake-Client-v3",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Skylake-Client-IBRS",
+      "typename": "Skylake-Client-IBRS-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm"
+      ],
+      "alias-of": "Skylake-Client-v2",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Skylake-Client",
+      "typename": "Skylake-Client-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm"
+      ],
+      "alias-of": "Skylake-Client-v1",
+      "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": [],
+      "alias-of": "SandyBridge-v2",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "SandyBridge",
+      "typename": "SandyBridge-x86_64-cpu",
+      "unavailable-features": [],
+      "alias-of": "SandyBridge-v1",
+      "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": [],
+      "alias-of": "Penryn-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Opteron_G5-v1",
+      "typename": "Opteron_G5-v1-x86_64-cpu",
+      "unavailable-features": [
+        "xop",
+        "fma4",
+        "tbm"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Opteron_G5",
+      "typename": "Opteron_G5-x86_64-cpu",
+      "unavailable-features": [
+        "xop",
+        "fma4",
+        "tbm"
+      ],
+      "alias-of": "Opteron_G5-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Opteron_G4-v1",
+      "typename": "Opteron_G4-v1-x86_64-cpu",
+      "unavailable-features": [
+        "xop",
+        "fma4"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Opteron_G4",
+      "typename": "Opteron_G4-x86_64-cpu",
+      "unavailable-features": [
+        "xop",
+        "fma4"
+      ],
+      "alias-of": "Opteron_G4-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Opteron_G3-v1",
+      "typename": "Opteron_G3-v1-x86_64-cpu",
+      "unavailable-features": [],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Opteron_G3",
+      "typename": "Opteron_G3-x86_64-cpu",
+      "unavailable-features": [],
+      "alias-of": "Opteron_G3-v1",
+      "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": [],
+      "alias-of": "Opteron_G2-v1",
+      "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": [],
+      "alias-of": "Opteron_G1-v1",
+      "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": [],
+      "alias-of": "Nehalem-v2",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Nehalem",
+      "typename": "Nehalem-x86_64-cpu",
+      "unavailable-features": [],
+      "alias-of": "Nehalem-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "KnightsMill-v1",
+      "typename": "KnightsMill-v1-x86_64-cpu",
+      "unavailable-features": [
+        "ss",
+        "erms",
+        "avx512f",
+        "avx512pf",
+        "avx512er",
+        "avx512cd",
+        "avx512-vpopcntdq",
+        "avx512-4vnniw",
+        "avx512-4fmaps",
+        "avx512f",
+        "avx512f",
+        "avx512f"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "KnightsMill",
+      "typename": "KnightsMill-x86_64-cpu",
+      "unavailable-features": [
+        "ss",
+        "erms",
+        "avx512f",
+        "avx512pf",
+        "avx512er",
+        "avx512cd",
+        "avx512-vpopcntdq",
+        "avx512-4vnniw",
+        "avx512-4fmaps",
+        "avx512f",
+        "avx512f",
+        "avx512f"
+      ],
+      "alias-of": "KnightsMill-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "IvyBridge-v2",
+      "typename": "IvyBridge-v2-x86_64-cpu",
+      "unavailable-features": [
+        "erms"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "IvyBridge-v1",
+      "typename": "IvyBridge-v1-x86_64-cpu",
+      "unavailable-features": [
+        "erms"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "IvyBridge-IBRS",
+      "typename": "IvyBridge-IBRS-x86_64-cpu",
+      "unavailable-features": [
+        "erms"
+      ],
+      "alias-of": "IvyBridge-v2",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "IvyBridge",
+      "typename": "IvyBridge-x86_64-cpu",
+      "unavailable-features": [
+        "erms"
+      ],
+      "alias-of": "IvyBridge-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Icelake-Server-v3",
+      "typename": "Icelake-Server-v3-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "avx512vbmi",
+        "pku",
+        "avx512vbmi2",
+        "gfni",
+        "vaes",
+        "vpclmulqdq",
+        "avx512vnni",
+        "avx512bitalg",
+        "avx512-vpopcntdq",
+        "la57",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku",
+        "ibrs-all",
+        "taa-no"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Icelake-Server-v2",
+      "typename": "Icelake-Server-v2-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "avx512vbmi",
+        "pku",
+        "avx512vbmi2",
+        "gfni",
+        "vaes",
+        "vpclmulqdq",
+        "avx512vnni",
+        "avx512bitalg",
+        "avx512-vpopcntdq",
+        "la57",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Icelake-Server-v1",
+      "typename": "Icelake-Server-v1-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "avx512vbmi",
+        "pku",
+        "avx512vbmi2",
+        "gfni",
+        "vaes",
+        "vpclmulqdq",
+        "avx512vnni",
+        "avx512bitalg",
+        "avx512-vpopcntdq",
+        "la57",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Icelake-Server-noTSX",
+      "typename": "Icelake-Server-noTSX-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "avx512vbmi",
+        "pku",
+        "avx512vbmi2",
+        "gfni",
+        "vaes",
+        "vpclmulqdq",
+        "avx512vnni",
+        "avx512bitalg",
+        "avx512-vpopcntdq",
+        "la57",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku"
+      ],
+      "alias-of": "Icelake-Server-v2",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Icelake-Server",
+      "typename": "Icelake-Server-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "avx512vbmi",
+        "pku",
+        "avx512vbmi2",
+        "gfni",
+        "vaes",
+        "vpclmulqdq",
+        "avx512vnni",
+        "avx512bitalg",
+        "avx512-vpopcntdq",
+        "la57",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku"
+      ],
+      "alias-of": "Icelake-Server-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Icelake-Client-v2",
+      "typename": "Icelake-Client-v2-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid",
+        "avx512vbmi",
+        "pku",
+        "avx512vbmi2",
+        "gfni",
+        "vaes",
+        "vpclmulqdq",
+        "avx512vnni",
+        "avx512bitalg",
+        "avx512-vpopcntdq",
+        "pku"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Icelake-Client-v1",
+      "typename": "Icelake-Client-v1-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm",
+        "avx512vbmi",
+        "pku",
+        "avx512vbmi2",
+        "gfni",
+        "vaes",
+        "vpclmulqdq",
+        "avx512vnni",
+        "avx512bitalg",
+        "avx512-vpopcntdq",
+        "pku"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Icelake-Client-noTSX",
+      "typename": "Icelake-Client-noTSX-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid",
+        "avx512vbmi",
+        "pku",
+        "avx512vbmi2",
+        "gfni",
+        "vaes",
+        "vpclmulqdq",
+        "avx512vnni",
+        "avx512bitalg",
+        "avx512-vpopcntdq",
+        "pku"
+      ],
+      "alias-of": "Icelake-Client-v2",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Icelake-Client",
+      "typename": "Icelake-Client-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm",
+        "avx512vbmi",
+        "pku",
+        "avx512vbmi2",
+        "gfni",
+        "vaes",
+        "vpclmulqdq",
+        "avx512vnni",
+        "avx512bitalg",
+        "avx512-vpopcntdq",
+        "pku"
+      ],
+      "alias-of": "Icelake-Client-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Haswell-v4",
+      "typename": "Haswell-v4-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Haswell-v3",
+      "typename": "Haswell-v3-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Haswell-v2",
+      "typename": "Haswell-v2-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Haswell-v1",
+      "typename": "Haswell-v1-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Haswell-noTSX-IBRS",
+      "typename": "Haswell-noTSX-IBRS-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid"
+      ],
+      "alias-of": "Haswell-v4",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Haswell-noTSX",
+      "typename": "Haswell-noTSX-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid"
+      ],
+      "alias-of": "Haswell-v2",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Haswell-IBRS",
+      "typename": "Haswell-IBRS-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm"
+      ],
+      "alias-of": "Haswell-v3",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Haswell",
+      "typename": "Haswell-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm"
+      ],
+      "alias-of": "Haswell-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "EPYC-v3",
+      "typename": "EPYC-v3-x86_64-cpu",
+      "unavailable-features": [],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "EPYC-v2",
+      "typename": "EPYC-v2-x86_64-cpu",
+      "unavailable-features": [],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "EPYC-v1",
+      "typename": "EPYC-v1-x86_64-cpu",
+      "unavailable-features": [],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "EPYC-Rome-v1",
+      "typename": "EPYC-Rome-v1-x86_64-cpu",
+      "unavailable-features": [],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "EPYC-Rome",
+      "typename": "EPYC-Rome-x86_64-cpu",
+      "unavailable-features": [],
+      "alias-of": "EPYC-Rome-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "EPYC-IBPB",
+      "typename": "EPYC-IBPB-x86_64-cpu",
+      "unavailable-features": [],
+      "alias-of": "EPYC-v2",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "EPYC",
+      "typename": "EPYC-x86_64-cpu",
+      "unavailable-features": [],
+      "alias-of": "EPYC-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Dhyana-v1",
+      "typename": "Dhyana-v1-x86_64-cpu",
+      "unavailable-features": [],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Dhyana",
+      "typename": "Dhyana-x86_64-cpu",
+      "unavailable-features": [],
+      "alias-of": "Dhyana-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Denverton-v2",
+      "typename": "Denverton-v2-x86_64-cpu",
+      "unavailable-features": [
+        "erms"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Denverton-v1",
+      "typename": "Denverton-v1-x86_64-cpu",
+      "unavailable-features": [
+        "erms",
+        "mpx",
+        "mpx",
+        "mpx"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Denverton",
+      "typename": "Denverton-x86_64-cpu",
+      "unavailable-features": [
+        "erms",
+        "mpx",
+        "mpx",
+        "mpx"
+      ],
+      "alias-of": "Denverton-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Cooperlake-v1",
+      "typename": "Cooperlake-v1-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "pku",
+        "avx512vnni",
+        "avx512-bf16",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku",
+        "ibrs-all",
+        "taa-no"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Cooperlake",
+      "typename": "Cooperlake-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "pku",
+        "avx512vnni",
+        "avx512-bf16",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku",
+        "ibrs-all",
+        "taa-no"
+      ],
+      "alias-of": "Cooperlake-v1",
+      "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": [],
+      "alias-of": "Conroe-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Cascadelake-Server-v3",
+      "typename": "Cascadelake-Server-v3-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "pku",
+        "avx512vnni",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku",
+        "ibrs-all"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Cascadelake-Server-v2",
+      "typename": "Cascadelake-Server-v2-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "pku",
+        "avx512vnni",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku",
+        "ibrs-all"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Cascadelake-Server-v1",
+      "typename": "Cascadelake-Server-v1-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "pku",
+        "avx512vnni",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Cascadelake-Server-noTSX",
+      "typename": "Cascadelake-Server-noTSX-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "pku",
+        "avx512vnni",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku",
+        "ibrs-all"
+      ],
+      "alias-of": "Cascadelake-Server-v3",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Cascadelake-Server",
+      "typename": "Cascadelake-Server-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm",
+        "avx512f",
+        "avx512dq",
+        "avx512cd",
+        "avx512bw",
+        "avx512vl",
+        "pku",
+        "avx512vnni",
+        "avx512f",
+        "avx512f",
+        "avx512f",
+        "pku"
+      ],
+      "alias-of": "Cascadelake-Server-v1",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Broadwell-v4",
+      "typename": "Broadwell-v4-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Broadwell-v3",
+      "typename": "Broadwell-v3-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Broadwell-v2",
+      "typename": "Broadwell-v2-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Broadwell-v1",
+      "typename": "Broadwell-v1-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm"
+      ],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Broadwell-noTSX-IBRS",
+      "typename": "Broadwell-noTSX-IBRS-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid"
+      ],
+      "alias-of": "Broadwell-v4",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Broadwell-noTSX",
+      "typename": "Broadwell-noTSX-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "erms",
+        "invpcid"
+      ],
+      "alias-of": "Broadwell-v2",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Broadwell-IBRS",
+      "typename": "Broadwell-IBRS-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm"
+      ],
+      "alias-of": "Broadwell-v3",
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "Broadwell",
+      "typename": "Broadwell-x86_64-cpu",
+      "unavailable-features": [
+        "pcid",
+        "hle",
+        "erms",
+        "invpcid",
+        "rtm"
+      ],
+      "alias-of": "Broadwell-v1",
+      "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": [],
+      "alias-of": "486-v1",
+      "static": false,
+      "migration-safe": true
+    }
+  ],
+  "id": "definitions"
+}
diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.sig b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.sig
new file mode 100644
index 0000000000..cf54739de9
--- /dev/null
+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.sig
@@ -0,0 +1,4 @@
+830f10
+family:    23 (0x17)
+model:     49 (0x31)
+stepping:   0 (0x00)
diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.xml
new file mode 100644
index 0000000000..fc4fd433dd
--- /dev/null
+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.xml
@@ -0,0 +1,66 @@
+<!-- AMD EPYC 7502 32-Core Processor -->
+<cpudata arch='x86'>
+  <cpuid eax_in='0x00000000' ecx_in='0x00' eax='0x00000010' ebx='0x68747541' ecx='0x444d4163' edx='0x69746e65'/>
+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00830f10' ebx='0x18400800' ecx='0x7ed8320b' edx='0x178bfbff'/>
+  <cpuid eax_in='0x00000002' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x00000003' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x00000005' ecx_in='0x00' eax='0x00000040' ebx='0x00000040' ecx='0x00000003' edx='0x00000011'/>
+  <cpuid eax_in='0x00000006' ecx_in='0x00' eax='0x00000004' ebx='0x00000000' ecx='0x00000001' edx='0x00000000'/>
+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x219c91a9' ecx='0x00400004' edx='0x00000000'/>
+  <cpuid eax_in='0x00000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x00000009' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x0000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x0000000b' ecx_in='0x00' eax='0x00000001' ebx='0x00000002' ecx='0x00000100' edx='0x00000018'/>
+  <cpuid eax_in='0x0000000b' ecx_in='0x01' eax='0x00000007' ebx='0x00000040' ecx='0x00000201' edx='0x00000018'/>
+  <cpuid eax_in='0x0000000c' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x0000000d' ecx_in='0x00' eax='0x00000207' ebx='0x00000340' ecx='0x00000380' edx='0x00000000'/>
+  <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000340' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x0000000d' ecx_in='0x02' eax='0x00000100' ebx='0x00000240' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x0000000d' ecx_in='0x09' eax='0x00000040' ebx='0x00000340' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x0000000e' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x0000000f' ecx_in='0x00' eax='0x00000000' ebx='0x000000ff' ecx='0x00000000' edx='0x00000002'/>
+  <cpuid eax_in='0x0000000f' ecx_in='0x01' eax='0x00000000' ebx='0x00000040' ecx='0x000000ff' edx='0x00000007'/>
+  <cpuid eax_in='0x00000010' ecx_in='0x00' eax='0x00000000' ebx='0x00000002' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x00000010' ecx_in='0x01' eax='0x0000000f' ebx='0x00000000' ecx='0x00000004' edx='0x0000000f'/>
+  <cpuid eax_in='0x20000000' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x80000000' ecx_in='0x00' eax='0x80000020' ebx='0x68747541' ecx='0x444d4163' edx='0x69746e65'/>
+  <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00830f10' ebx='0x40000000' ecx='0x75c237ff' edx='0x2fd3fbff'/>
+  <cpuid eax_in='0x80000002' ecx_in='0x00' eax='0x20444d41' ebx='0x43595045' ecx='0x30353720' edx='0x32332032'/>
+  <cpuid eax_in='0x80000003' ecx_in='0x00' eax='0x726f432d' ebx='0x72502065' ecx='0x7365636f' edx='0x20726f73'/>
+  <cpuid eax_in='0x80000004' ecx_in='0x00' eax='0x20202020' ebx='0x20202020' ecx='0x20202020' edx='0x00202020'/>
+  <cpuid eax_in='0x80000005' ecx_in='0x00' eax='0xff40ff40' ebx='0xff40ff40' ecx='0x20080140' edx='0x20080140'/>
+  <cpuid eax_in='0x80000006' ecx_in='0x00' eax='0x48006400' ebx='0x68006400' ecx='0x02006140' edx='0x04009140'/>
+  <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x0000001b' ecx='0x00000000' edx='0x00006799'/>
+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00003030' ebx='0x018cf757' ecx='0x0000703f' edx='0x00010000'/>
+  <cpuid eax_in='0x80000009' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000001' ebx='0x00008000' ecx='0x00000000' edx='0x0013bcff'/>
+  <cpuid eax_in='0x8000000b' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x8000000c' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x8000000d' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x8000000e' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x8000000f' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x80000010' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x80000011' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x80000012' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x80000013' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x80000014' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x80000015' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x80000016' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x80000017' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x80000018' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x80000019' ecx_in='0x00' eax='0xf040f040' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x8000001a' ecx_in='0x00' eax='0x00000006' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x8000001b' ecx_in='0x00' eax='0x000003ff' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x8000001c' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x8000001d' ecx_in='0x00' eax='0x00004121' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/>
+  <cpuid eax_in='0x8000001d' ecx_in='0x01' eax='0x00004122' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/>
+  <cpuid eax_in='0x8000001d' ecx_in='0x02' eax='0x00004143' ebx='0x01c0003f' ecx='0x000003ff' edx='0x00000002'/>
+  <cpuid eax_in='0x8000001d' ecx_in='0x03' eax='0x0001c163' ebx='0x03c0003f' ecx='0x00003fff' edx='0x00000001'/>
+  <cpuid eax_in='0x8000001e' ecx_in='0x00' eax='0x00000018' ebx='0x0000010c' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x8000001f' ecx_in='0x00' eax='0x0001000f' ebx='0x0000016f' ecx='0x000001fd' edx='0x00000001'/>
+  <cpuid eax_in='0x80000020' ecx_in='0x00' eax='0x00000000' ebx='0x00000002' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x80000020' ecx_in='0x01' eax='0x0000000b' ebx='0x00000000' ecx='0x00000000' edx='0x0000000f'/>
+  <cpuid eax_in='0x80860000' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0xc0000000' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
+  <msr index='0x10a' edx='0x00000000' eax='0x00000069'/>
+</cpudata>
diff --git a/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-disabled.xml b/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-disabled.xml
index 869659cc80..ca71b9efb5 100644
--- a/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-disabled.xml
+++ b/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-disabled.xml
@@ -5,6 +5,5 @@
   <cpuid eax_in='0x0000000f' ecx_in='0x01' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000006'/>
   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01423408' edx='0x00000000'/>
   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x00008000' ecx='0x00000000' edx='0x00000000'/>
   <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x000014f6'/>
 </cpudata>
diff --git a/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-enabled.xml b/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-enabled.xml
index 7458db25ab..55f41693d9 100644
--- a/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-enabled.xml
+++ b/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-enabled.xml
@@ -5,7 +5,7 @@
   <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x219c01ab' ecx='0x00400004' edx='0xa8000000'/>
   <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x008003f7' edx='0x2e500800'/>
-  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x03001205' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x03009205' ecx='0x00000000' edx='0x00000000'/>
   <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000009'/>
   <msr index='0x10a' edx='0x00000000' eax='0x00000069'/>
 </cpudata>
diff --git a/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-guest.xml b/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-guest.xml
index 1320f65a58..a49ef46f52 100644
--- a/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-guest.xml
+++ b/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-guest.xml
@@ -1,12 +1,10 @@
 <cpu mode='custom' match='exact'>
-  <model fallback='forbid'>EPYC-IBPB</model>
+  <model fallback='forbid'>EPYC-Rome</model>
   <vendor>AMD</vendor>
   <feature policy='require' name='ht'/>
   <feature policy='require' name='osxsave'/>
   <feature policy='require' name='cmt'/>
-  <feature policy='require' name='clwb'/>
   <feature policy='require' name='umip'/>
-  <feature policy='require' name='rdpid'/>
   <feature policy='require' name='xsaves'/>
   <feature policy='require' name='mbm_total'/>
   <feature policy='require' name='mbm_local'/>
@@ -17,13 +15,8 @@
   <feature policy='require' name='wdt'/>
   <feature policy='require' name='tce'/>
   <feature policy='require' name='topoext'/>
-  <feature policy='require' name='perfctr_core'/>
   <feature policy='require' name='perfctr_nb'/>
   <feature policy='require' name='invtsc'/>
-  <feature policy='require' name='clzero'/>
-  <feature policy='require' name='xsaveerptr'/>
-  <feature policy='require' name='wbnoinvd'/>
-  <feature policy='require' name='amd-stibp'/>
   <feature policy='require' name='amd-ssbd'/>
   <feature policy='require' name='npt'/>
   <feature policy='require' name='lbrv'/>
diff --git a/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-host.xml b/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-host.xml
index 37905ec812..e9aea3339a 100644
--- a/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-host.xml
+++ b/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-host.xml
@@ -1,13 +1,11 @@
 <cpu>
   <arch>x86_64</arch>
-  <model>EPYC-IBPB</model>
+  <model>EPYC-Rome</model>
   <vendor>AMD</vendor>
   <feature name='ht'/>
   <feature name='osxsave'/>
   <feature name='cmt'/>
-  <feature name='clwb'/>
   <feature name='umip'/>
-  <feature name='rdpid'/>
   <feature name='xsaves'/>
   <feature name='mbm_total'/>
   <feature name='mbm_local'/>
@@ -18,13 +16,8 @@
   <feature name='wdt'/>
   <feature name='tce'/>
   <feature name='topoext'/>
-  <feature name='perfctr_core'/>
   <feature name='perfctr_nb'/>
   <feature name='invtsc'/>
-  <feature name='clzero'/>
-  <feature name='xsaveerptr'/>
-  <feature name='wbnoinvd'/>
-  <feature name='amd-stibp'/>
   <feature name='amd-ssbd'/>
   <feature name='npt'/>
   <feature name='lbrv'/>
diff --git a/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-json.xml b/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-json.xml
index fba378e030..5b83c04d3f 100644
--- a/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-json.xml
+++ b/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-json.xml
@@ -1,22 +1,16 @@
 <cpu mode='custom' match='exact'>
-  <model fallback='forbid'>EPYC-IBPB</model>
+  <model fallback='forbid'>EPYC-Rome</model>
   <vendor>AMD</vendor>
   <feature policy='require' name='x2apic'/>
   <feature policy='require' name='tsc-deadline'/>
   <feature policy='require' name='hypervisor'/>
   <feature policy='require' name='tsc_adjust'/>
-  <feature policy='require' name='clwb'/>
   <feature policy='require' name='umip'/>
-  <feature policy='require' name='rdpid'/>
   <feature policy='require' name='stibp'/>
   <feature policy='require' name='arch-capabilities'/>
   <feature policy='require' name='ssbd'/>
   <feature policy='require' name='xsaves'/>
   <feature policy='require' name='cmp_legacy'/>
-  <feature policy='require' name='perfctr_core'/>
-  <feature policy='require' name='clzero'/>
-  <feature policy='require' name='xsaveerptr'/>
-  <feature policy='require' name='wbnoinvd'/>
   <feature policy='require' name='amd-ssbd'/>
   <feature policy='require' name='virt-ssbd'/>
   <feature policy='require' name='npt'/>
diff --git a/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core.json b/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core.json
index fbdf1a794a..9ecc965e53 100644
--- a/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core.json
+++ b/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core.json
@@ -313,6 +313,7 @@
         "tsc_scale": false,
         "tsc-scale": false,
         "topoext": false,
+        "amd-stibp": true,
         "hv-vpindex": false,
         "hv-no-nonarch-coresharing": "off",
         "vmx-preemption-timer": false,
@@ -1501,6 +1502,13 @@
       "static": false,
       "migration-safe": true
     },
+    {
+      "name": "EPYC-v3",
+      "typename": "EPYC-v3-x86_64-cpu",
+      "unavailable-features": [],
+      "static": false,
+      "migration-safe": true
+    },
     {
       "name": "EPYC-v2",
       "typename": "EPYC-v2-x86_64-cpu",
@@ -1515,6 +1523,21 @@
       "static": false,
       "migration-safe": true
     },
+    {
+      "name": "EPYC-Rome-v1",
+      "typename": "EPYC-Rome-v1-x86_64-cpu",
+      "unavailable-features": [],
+      "static": false,
+      "migration-safe": true
+    },
+    {
+      "name": "EPYC-Rome",
+      "typename": "EPYC-Rome-x86_64-cpu",
+      "unavailable-features": [],
+      "alias-of": "EPYC-Rome-v1",
+      "static": false,
+      "migration-safe": true
+    },
     {
       "name": "EPYC-IBPB",
       "typename": "EPYC-IBPB-x86_64-cpu",
diff --git a/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core.xml b/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core.xml
index c8db5e3e10..40abc48762 100644
--- a/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core.xml
+++ b/tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core.xml
@@ -1,7 +1,7 @@
 <!-- AMD Ryzen 9 3900X 12-Core Processor -->
 <cpudata arch='x86'>
   <cpuid eax_in='0x00000000' ecx_in='0x00' eax='0x00000010' ebx='0x68747541' ecx='0x444d4163' edx='0x69746e65'/>
-  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00870f10' ebx='0x10180800' ecx='0x7ed8320b' edx='0x178bfbff'/>
+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00870f10' ebx='0x0a180800' ecx='0x7ed8320b' edx='0x178bfbff'/>
   <cpuid eax_in='0x00000002' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
   <cpuid eax_in='0x00000003' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
   <cpuid eax_in='0x00000005' ecx_in='0x00' eax='0x00000040' ebx='0x00000040' ecx='0x00000003' edx='0x00000011'/>
@@ -10,8 +10,8 @@
   <cpuid eax_in='0x00000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
   <cpuid eax_in='0x00000009' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
   <cpuid eax_in='0x0000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-  <cpuid eax_in='0x0000000b' ecx_in='0x00' eax='0x00000001' ebx='0x00000002' ecx='0x00000100' edx='0x00000010'/>
-  <cpuid eax_in='0x0000000b' ecx_in='0x01' eax='0x00000007' ebx='0x00000018' ecx='0x00000201' edx='0x00000010'/>
+  <cpuid eax_in='0x0000000b' ecx_in='0x00' eax='0x00000001' ebx='0x00000002' ecx='0x00000100' edx='0x0000000a'/>
+  <cpuid eax_in='0x0000000b' ecx_in='0x01' eax='0x00000007' ebx='0x00000018' ecx='0x00000201' edx='0x0000000a'/>
   <cpuid eax_in='0x0000000c' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
   <cpuid eax_in='0x0000000d' ecx_in='0x00' eax='0x00000207' ebx='0x00000340' ecx='0x00000380' edx='0x00000000'/>
   <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000340' ecx='0x00000000' edx='0x00000000'/>
@@ -26,8 +26,8 @@
   <cpuid eax_in='0x80000000' ecx_in='0x00' eax='0x80000020' ebx='0x68747541' ecx='0x444d4163' edx='0x69746e65'/>
   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00870f10' ebx='0x20000000' ecx='0x75c237ff' edx='0x2fd3fbff'/>
   <cpuid eax_in='0x80000002' ecx_in='0x00' eax='0x20444d41' ebx='0x657a7952' ecx='0x2039206e' edx='0x30303933'/>
-  <cpuid eax_in='0x80000003' ecx_in='0x00' eax='0x32312058' ebx='0x726f432d' ecx='0x72502065' edx='0x7365636f'/>
-  <cpuid eax_in='0x80000004' ecx_in='0x00' eax='0x20726f73' ebx='0x20202020' ecx='0x20202020' edx='0x00202020'/>
+  <cpuid eax_in='0x80000003' ecx_in='0x00' eax='0x2d323120' ebx='0x65726f43' ecx='0x6f725020' edx='0x73736563'/>
+  <cpuid eax_in='0x80000004' ecx_in='0x00' eax='0x2020726f' ebx='0x20202020' ecx='0x20202020' edx='0x00202020'/>
   <cpuid eax_in='0x80000005' ecx_in='0x00' eax='0xff40ff40' ebx='0xff40ff40' ecx='0x20080140' edx='0x20080140'/>
   <cpuid eax_in='0x80000006' ecx_in='0x00' eax='0x48006400' ebx='0x68006400' ecx='0x02006140' edx='0x02009140'/>
   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x0000001b' ecx='0x00000000' edx='0x00006799'/>
@@ -56,7 +56,7 @@
   <cpuid eax_in='0x8000001d' ecx_in='0x01' eax='0x00004122' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/>
   <cpuid eax_in='0x8000001d' ecx_in='0x02' eax='0x00004143' ebx='0x01c0003f' ecx='0x000003ff' edx='0x00000002'/>
   <cpuid eax_in='0x8000001d' ecx_in='0x03' eax='0x00014163' ebx='0x03c0003f' ecx='0x00003fff' edx='0x00000001'/>
-  <cpuid eax_in='0x8000001e' ecx_in='0x00' eax='0x00000010' ebx='0x00000108' ecx='0x00000000' edx='0x00000000'/>
+  <cpuid eax_in='0x8000001e' ecx_in='0x00' eax='0x0000000a' ebx='0x00000105' ecx='0x00000000' edx='0x00000000'/>
   <cpuid eax_in='0x8000001f' ecx_in='0x00' eax='0x0001000f' ebx='0x0000016f' ecx='0x000001fd' edx='0x00000001'/>
   <cpuid eax_in='0x80000020' ecx_in='0x00' eax='0x00000000' ebx='0x00000002' ecx='0x00000000' edx='0x00000000'/>
   <cpuid eax_in='0x80000020' ecx_in='0x01' eax='0x0000000b' ebx='0x00000000' ecx='0x00000000' edx='0x0000000f'/>
-- 
2.26.2

Re: [libvirt PATCH] cpu_map: Add EPYC-Rome model
Posted by Jiri Denemark 3 years, 6 months ago
On Mon, Sep 28, 2020 at 13:17:22 +0200, Markus Schade wrote:
> Signed-off-by: Markus Schade <markus.schade@hetzner.com>
> ---

Thanks, I'm sorry I didn't say it last time (as I didn't realize it
would be needed in this case), but it's better to split the patch in
two. First add the new data files for EPYC-7502, i.e.,

>  tests/cputest.c                               |    1 +
>  ...86_64-cpuid-EPYC-7502-32-Core-disabled.xml |    9 +
>  ...x86_64-cpuid-EPYC-7502-32-Core-enabled.xml |   11 +
>  .../x86_64-cpuid-EPYC-7502-32-Core-guest.xml  |   35 +
>  .../x86_64-cpuid-EPYC-7502-32-Core-host.xml   |   36 +
>  .../x86_64-cpuid-EPYC-7502-32-Core-json.xml   |   24 +
>  .../x86_64-cpuid-EPYC-7502-32-Core.json       | 1910 +++++++++++++++++
>  .../x86_64-cpuid-EPYC-7502-32-Core.sig        |    4 +
>  .../x86_64-cpuid-EPYC-7502-32-Core.xml        |   66 +

At this point, you'd have to run

    VIR_TEST_REGENERATE_OUTPUT=1 tests/cputest

to update the computed CPU models to EPYC (as Rome is still unknown).

The second patch would add the new CPU model, which will result in some
CPUs to be detected as the new CPU model:

>  src/cpu_map/index.xml                         |    1 +
>  src/cpu_map/meson.build                       |    1 +
>  src/cpu_map/x86_EPYC-Rome.xml                 |   81 +

The current changes to the following files should be dropped completely.

>  ...4-cpuid-Ryzen-9-3900X-12-Core-disabled.xml |    1 -
>  ...64-cpuid-Ryzen-9-3900X-12-Core-enabled.xml |    2 +-
>  ...6_64-cpuid-Ryzen-9-3900X-12-Core-guest.xml |    9 +-
>  ...86_64-cpuid-Ryzen-9-3900X-12-Core-host.xml |    9 +-
>  ...86_64-cpuid-Ryzen-9-3900X-12-Core-json.xml |    8 +-
>  .../x86_64-cpuid-Ryzen-9-3900X-12-Core.json   |   23 +
>  .../x86_64-cpuid-Ryzen-9-3900X-12-Core.xml    |   12 +-

So after the new CPU model is introduced in patch 2, you would run

    VIR_TEST_REGENERATE_OUTPUT=1 tests/cputest

This should change x86_64-cpuid-EPYC-7502-32-Core-{guest,host,json}.xml
files to use EPYC-Rome. And this correct change will be nicely visible
in the patch as it does not contain 2000 lines of boring generated data.

But as you noticed the cputest would still fail for Ryzen 9. Instead of
refreshing the data (which could be done as a separate patch before
introducing the new model, but it is not really needed) we can do two
things. Either copy just the new supported CPU models from
x86_64-cpuid-Ryzen-9-3900X-12-Core.json or change the following line in
tests/cputest.c

    DO_TEST_CPUID(VIR_ARCH_X86_64, "Ryzen-9-3900X-12-Core", JSON_MODELS);

to

    DO_TEST_CPUID(VIR_ARCH_X86_64, "Ryzen-9-3900X-12-Core", JSON_MODELS_REQUIRED);

After this change, compiling libvirt, and regenerating the output of
cputest all tests should pass again.

I guess the name of the flag is terrible and the documentation does not
really help either, but what it does is making sure the CPU model in
*-guest.xml has to be one of the models supported by QEMU (i.e., listed
in *.json file). This second option is easier and preferred. It will
also nicely show that *-{guest,json}.xml files remains unchanged, but
*-host.xml changes from EPYC-IBPB to EPYC-Rome, which is actually wrong
(and you can explicitly mention it in the commit message) because our
CPU decoding code does not work that well for AMD CPUs and we need to
fix it (but that's of course out of scope for this series).

Jirka