[libvirt PATCH 0/5] Simplify x86 cpu feature synchronization with qemu

A recurring task in libvirt is synchronizing the list of (x86) cpu features with qemu. This is an error-prone and manual task as it relies on parsing qemu c source code and therefore neccessarily lags behind qemu development. The better solution would be if qemu and libvirt both got the cpu feature information from a common source. libcpuinfo [1] wants to be that source, a comprehensive, architecture agnostic database of cpu information, together with some handy tooling, e.g. a library to access this database at run-time, quering the host for capabilities, calculate baselines for different sets of capabilities. libcpuinfo comes with c headers and contains python bindings. This patch series prepares libvirt's x86 feature list to be automatically generated from libcpuinfo data, but introduces no dependency on libcpuinfo yet. Introducing that dependency to generate the feature list on compile time or making use of libcpuinfo's more advanced features would be up to discussion at a later date. Note that libcpuinfo's feature database is not on par with libvirt yet and to generate an identical version of x86_features.xml the data from libcpuinfo's "wip" branch is required. [1] https://gitlab.com/twiederh/libcpuinfo Tim Wiederhake (5): cpu_map: Sort cpu features cpu_map: Format register values uniformly cpu_map: Format comments cpu_map: Remove unused alias information cpu_map: Generate x86 feature map from libcpuinfo src/cpu_map/x86_features.py | 119 +++++++ src/cpu_map/x86_features.xml | 594 +++++++++++++++++------------------ 2 files changed, 407 insertions(+), 306 deletions(-) create mode 100755 src/cpu_map/x86_features.py -- 2.39.2

Signed-off-by: Tim Wiederhake <twiederh@redhat.com> --- src/cpu_map/x86_features.xml | 259 ++++++++++++++++++----------------- 1 file changed, 130 insertions(+), 129 deletions(-) diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml index 5845a2331b..8f46549e76 100644 --- a/src/cpu_map/x86_features.xml +++ b/src/cpu_map/x86_features.xml @@ -5,98 +5,6 @@ --> <cpus> - <!-- standard features, EDX --> - <feature name='fpu'> - <cpuid eax_in='0x01' edx='0x00000001'/> - </feature> - <feature name='vme'> - <cpuid eax_in='0x01' edx='0x00000002'/> - </feature> - <feature name='de'> - <cpuid eax_in='0x01' edx='0x00000004'/> - </feature> - <feature name='pse'> - <cpuid eax_in='0x01' edx='0x00000008'/> - </feature> - <feature name='tsc'> - <cpuid eax_in='0x01' edx='0x00000010'/> - </feature> - <feature name='msr'> - <cpuid eax_in='0x01' edx='0x00000020'/> - </feature> - <feature name='pae'> - <cpuid eax_in='0x01' edx='0x00000040'/> - </feature> - <feature name='mce'> - <cpuid eax_in='0x01' edx='0x00000080'/> - </feature> - <feature name='cx8'> - <cpuid eax_in='0x01' edx='0x00000100'/> - </feature> - <feature name='apic'> - <cpuid eax_in='0x01' edx='0x00000200'/> - </feature> - <feature name='sep'> - <cpuid eax_in='0x01' edx='0x00000800'/> - </feature> - <feature name='mtrr'> - <cpuid eax_in='0x01' edx='0x00001000'/> - </feature> - <feature name='pge'> - <cpuid eax_in='0x01' edx='0x00002000'/> - </feature> - <feature name='mca'> - <cpuid eax_in='0x01' edx='0x00004000'/> - </feature> - <feature name='cmov'> - <cpuid eax_in='0x01' edx='0x00008000'/> - </feature> - <feature name='pat'> - <cpuid eax_in='0x01' edx='0x00010000'/> - </feature> - <feature name='pse36'> - <cpuid eax_in='0x01' edx='0x00020000'/> - </feature> - <feature name='pn'> - <cpuid eax_in='0x01' edx='0x00040000'/> - </feature> - <feature name='clflush'> - <cpuid eax_in='0x01' edx='0x00080000'/> - </feature> - <feature name='ds'> - <cpuid eax_in='0x01' edx='0x00200000'/> - </feature> - <feature name='acpi'> - <cpuid eax_in='0x01' edx='0x00400000'/> - </feature> - <feature name='mmx'> - <cpuid eax_in='0x01' edx='0x00800000'/> - </feature> - <feature name='fxsr'> - <cpuid eax_in='0x01' edx='0x01000000'/> - </feature> - <feature name='sse'> - <cpuid eax_in='0x01' edx='0x02000000'/> - </feature> - <feature name='sse2'> - <cpuid eax_in='0x01' edx='0x04000000'/> - </feature> - <feature name='ss'> - <cpuid eax_in='0x01' edx='0x08000000'/> - </feature> - <feature name='ht'> - <cpuid eax_in='0x01' edx='0x10000000'/> - </feature> - <feature name='tm'> - <cpuid eax_in='0x01' edx='0x20000000'/> - </feature> - <feature name='ia64'> - <cpuid eax_in='0x01' edx='0x40000000'/> - </feature> - <feature name='pbe'> - <cpuid eax_in='0x01' edx='0x80000000'/> - </feature> - <!-- standard features, ECX --> <feature name='pni'> <alias name='sse3' source='qemu'/> @@ -196,6 +104,98 @@ <cpuid eax_in='0x01' ecx='0x80000000'/> </feature> + <!-- standard features, EDX --> + <feature name='fpu'> + <cpuid eax_in='0x01' edx='0x00000001'/> + </feature> + <feature name='vme'> + <cpuid eax_in='0x01' edx='0x00000002'/> + </feature> + <feature name='de'> + <cpuid eax_in='0x01' edx='0x00000004'/> + </feature> + <feature name='pse'> + <cpuid eax_in='0x01' edx='0x00000008'/> + </feature> + <feature name='tsc'> + <cpuid eax_in='0x01' edx='0x00000010'/> + </feature> + <feature name='msr'> + <cpuid eax_in='0x01' edx='0x00000020'/> + </feature> + <feature name='pae'> + <cpuid eax_in='0x01' edx='0x00000040'/> + </feature> + <feature name='mce'> + <cpuid eax_in='0x01' edx='0x00000080'/> + </feature> + <feature name='cx8'> + <cpuid eax_in='0x01' edx='0x00000100'/> + </feature> + <feature name='apic'> + <cpuid eax_in='0x01' edx='0x00000200'/> + </feature> + <feature name='sep'> + <cpuid eax_in='0x01' edx='0x00000800'/> + </feature> + <feature name='mtrr'> + <cpuid eax_in='0x01' edx='0x00001000'/> + </feature> + <feature name='pge'> + <cpuid eax_in='0x01' edx='0x00002000'/> + </feature> + <feature name='mca'> + <cpuid eax_in='0x01' edx='0x00004000'/> + </feature> + <feature name='cmov'> + <cpuid eax_in='0x01' edx='0x00008000'/> + </feature> + <feature name='pat'> + <cpuid eax_in='0x01' edx='0x00010000'/> + </feature> + <feature name='pse36'> + <cpuid eax_in='0x01' edx='0x00020000'/> + </feature> + <feature name='pn'> + <cpuid eax_in='0x01' edx='0x00040000'/> + </feature> + <feature name='clflush'> + <cpuid eax_in='0x01' edx='0x00080000'/> + </feature> + <feature name='ds'> + <cpuid eax_in='0x01' edx='0x00200000'/> + </feature> + <feature name='acpi'> + <cpuid eax_in='0x01' edx='0x00400000'/> + </feature> + <feature name='mmx'> + <cpuid eax_in='0x01' edx='0x00800000'/> + </feature> + <feature name='fxsr'> + <cpuid eax_in='0x01' edx='0x01000000'/> + </feature> + <feature name='sse'> + <cpuid eax_in='0x01' edx='0x02000000'/> + </feature> + <feature name='sse2'> + <cpuid eax_in='0x01' edx='0x04000000'/> + </feature> + <feature name='ss'> + <cpuid eax_in='0x01' edx='0x08000000'/> + </feature> + <feature name='ht'> + <cpuid eax_in='0x01' edx='0x10000000'/> + </feature> + <feature name='tm'> + <cpuid eax_in='0x01' edx='0x20000000'/> + </feature> + <feature name='ia64'> + <cpuid eax_in='0x01' edx='0x40000000'/> + </feature> + <feature name='pbe'> + <cpuid eax_in='0x01' edx='0x80000000'/> + </feature> + <!-- Termal Power and Management --> <feature name='arat'> <cpuid eax_in='0x06' eax='0x00000004'/> @@ -517,39 +517,6 @@ <cpuid eax_in='0x14' ecx_in='0x00' ecx='0x80000000'/> </feature> - <!-- extended features, EDX --> - <feature name='syscall'> - <cpuid eax_in='0x80000001' edx='0x00000800'/> - </feature> - <feature name='nx'> - <alias name='xd' source='qemu'/> - <cpuid eax_in='0x80000001' edx='0x00100000'/> - </feature> - <feature name='mmxext'> - <cpuid eax_in='0x80000001' edx='0x00400000'/> - </feature> - <feature name='fxsr_opt'> - <alias name='ffxsr' source='qemu'/> - <alias name='fxsr-opt' source='qemu'/> - <cpuid eax_in='0x80000001' edx='0x02000000'/> - </feature> - <feature name='pdpe1gb'> - <cpuid eax_in='0x80000001' edx='0x04000000'/> - </feature> - <feature name='rdtscp'> - <cpuid eax_in='0x80000001' edx='0x08000000'/> - </feature> - <feature name='lm'> - <alias name='i64' source='qemu'/> - <cpuid eax_in='0x80000001' edx='0x20000000'/> - </feature> - <feature name='3dnowext'> - <cpuid eax_in='0x80000001' edx='0x40000000'/> - </feature> - <feature name='3dnow'> - <cpuid eax_in='0x80000001' edx='0x80000000'/> - </feature> - <!-- extended features, ECX --> <feature name='lahf_lm'> <alias name='lahf-lm' source='qemu'/> @@ -626,6 +593,39 @@ <cpuid eax_in='0x80000001' ecx='0x01000000'/> </feature> + <!-- extended features, EDX --> + <feature name='syscall'> + <cpuid eax_in='0x80000001' edx='0x00000800'/> + </feature> + <feature name='nx'> + <alias name='xd' source='qemu'/> + <cpuid eax_in='0x80000001' edx='0x00100000'/> + </feature> + <feature name='mmxext'> + <cpuid eax_in='0x80000001' edx='0x00400000'/> + </feature> + <feature name='fxsr_opt'> + <alias name='ffxsr' source='qemu'/> + <alias name='fxsr-opt' source='qemu'/> + <cpuid eax_in='0x80000001' edx='0x02000000'/> + </feature> + <feature name='pdpe1gb'> + <cpuid eax_in='0x80000001' edx='0x04000000'/> + </feature> + <feature name='rdtscp'> + <cpuid eax_in='0x80000001' edx='0x08000000'/> + </feature> + <feature name='lm'> + <alias name='i64' source='qemu'/> + <cpuid eax_in='0x80000001' edx='0x20000000'/> + </feature> + <feature name='3dnowext'> + <cpuid eax_in='0x80000001' edx='0x40000000'/> + </feature> + <feature name='3dnow'> + <cpuid eax_in='0x80000001' edx='0x80000000'/> + </feature> + <!-- Advanced Power Management edx features --> <feature name='invtsc' migratable='no'> <cpuid eax_in='0x80000007' edx='0x00000100'/> @@ -732,6 +732,11 @@ <cpuid eax_in='0x80000021' eax='0x00000100'/> </feature> + <!-- IA32_CORE_CAPABILITIES features --> + <feature name='split-lock-detect'> + <msr index='0xcf' edx='0x00000000' eax='0x00000020'/> + </feature> + <!-- IA32_ARCH_CAPABILITIES features --> <feature name='rdctl-no'> <msr index='0x10a' edx='0x00000000' eax='0x00000001'/> @@ -776,8 +781,4 @@ <msr index='0x10a' edx='0x00000000' eax='0x01000000'/> </feature> - <!-- IA32_CORE_CAPABILITIES features --> - <feature name='split-lock-detect'> - <msr index='0xcf' edx='0x00000000' eax='0x00000020'/> - </feature> </cpus> -- 2.39.2

Use "0x%08x" as format for all values: sed -e "s/'0x\(..\)'/'0x000000\\1'/g" -e "s/'0x\(...\)'/'0x00000\\1'/g" Signed-off-by: Tim Wiederhake <twiederh@redhat.com> --- src/cpu_map/x86_features.xml | 348 +++++++++++++++++------------------ 1 file changed, 174 insertions(+), 174 deletions(-) diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml index 8f46549e76..f53ec0d835 100644 --- a/src/cpu_map/x86_features.xml +++ b/src/cpu_map/x86_features.xml @@ -8,513 +8,513 @@ <!-- standard features, ECX --> <feature name='pni'> <alias name='sse3' source='qemu'/> - <cpuid eax_in='0x01' ecx='0x00000001'/> + <cpuid eax_in='0x00000001' ecx='0x00000001'/> </feature> <feature name='pclmuldq'> <alias name='pclmulqdq' source='qemu'/> - <cpuid eax_in='0x01' ecx='0x00000002'/> + <cpuid eax_in='0x00000001' ecx='0x00000002'/> </feature> <feature name='dtes64'> - <cpuid eax_in='0x01' ecx='0x00000004'/> + <cpuid eax_in='0x00000001' ecx='0x00000004'/> </feature> <feature name='monitor'> - <cpuid eax_in='0x01' ecx='0x00000008'/> + <cpuid eax_in='0x00000001' ecx='0x00000008'/> </feature> <feature name='ds_cpl'> <alias name='ds-cpl' source='qemu'/> - <cpuid eax_in='0x01' ecx='0x00000010'/> + <cpuid eax_in='0x00000001' ecx='0x00000010'/> </feature> <feature name='vmx'> - <cpuid eax_in='0x01' ecx='0x00000020'/> + <cpuid eax_in='0x00000001' ecx='0x00000020'/> </feature> <feature name='smx'> - <cpuid eax_in='0x01' ecx='0x00000040'/> + <cpuid eax_in='0x00000001' ecx='0x00000040'/> </feature> <feature name='est'> - <cpuid eax_in='0x01' ecx='0x00000080'/> + <cpuid eax_in='0x00000001' ecx='0x00000080'/> </feature> <feature name='tm2'> - <cpuid eax_in='0x01' ecx='0x00000100'/> + <cpuid eax_in='0x00000001' ecx='0x00000100'/> </feature> <feature name='ssse3'> - <cpuid eax_in='0x01' ecx='0x00000200'/> + <cpuid eax_in='0x00000001' ecx='0x00000200'/> </feature> <feature name='cid'> - <cpuid eax_in='0x01' ecx='0x00000400'/> + <cpuid eax_in='0x00000001' ecx='0x00000400'/> </feature> <feature name='fma'> - <cpuid eax_in='0x01' ecx='0x00001000'/> + <cpuid eax_in='0x00000001' ecx='0x00001000'/> </feature> <feature name='cx16'> - <cpuid eax_in='0x01' ecx='0x00002000'/> + <cpuid eax_in='0x00000001' ecx='0x00002000'/> </feature> <feature name='xtpr'> - <cpuid eax_in='0x01' ecx='0x00004000'/> + <cpuid eax_in='0x00000001' ecx='0x00004000'/> </feature> <feature name='pdcm'> - <cpuid eax_in='0x01' ecx='0x00008000'/> + <cpuid eax_in='0x00000001' ecx='0x00008000'/> </feature> <feature name='pcid'> - <cpuid eax_in='0x01' ecx='0x00020000'/> + <cpuid eax_in='0x00000001' ecx='0x00020000'/> </feature> <feature name='dca'> - <cpuid eax_in='0x01' ecx='0x00040000'/> + <cpuid eax_in='0x00000001' ecx='0x00040000'/> </feature> <feature name='sse4.1'> <alias name='sse4-1' source='qemu'/> <alias name='sse4_1' source='qemu'/> - <cpuid eax_in='0x01' ecx='0x00080000'/> + <cpuid eax_in='0x00000001' ecx='0x00080000'/> </feature> <feature name='sse4.2'> <alias name='sse4-2' source='qemu'/> <alias name='sse4_2' source='qemu'/> - <cpuid eax_in='0x01' ecx='0x00100000'/> + <cpuid eax_in='0x00000001' ecx='0x00100000'/> </feature> <feature name='x2apic'> - <cpuid eax_in='0x01' ecx='0x00200000'/> + <cpuid eax_in='0x00000001' ecx='0x00200000'/> </feature> <feature name='movbe'> - <cpuid eax_in='0x01' ecx='0x00400000'/> + <cpuid eax_in='0x00000001' ecx='0x00400000'/> </feature> <feature name='popcnt'> - <cpuid eax_in='0x01' ecx='0x00800000'/> + <cpuid eax_in='0x00000001' ecx='0x00800000'/> </feature> <feature name='tsc-deadline'> - <cpuid eax_in='0x01' ecx='0x01000000'/> + <cpuid eax_in='0x00000001' ecx='0x01000000'/> </feature> <feature name='aes'> - <cpuid eax_in='0x01' ecx='0x02000000'/> + <cpuid eax_in='0x00000001' ecx='0x02000000'/> </feature> <feature name='xsave'> - <cpuid eax_in='0x01' ecx='0x04000000'/> + <cpuid eax_in='0x00000001' ecx='0x04000000'/> </feature> <feature name='osxsave'> - <cpuid eax_in='0x01' ecx='0x08000000'/> + <cpuid eax_in='0x00000001' ecx='0x08000000'/> </feature> <feature name='avx'> - <cpuid eax_in='0x01' ecx='0x10000000'/> + <cpuid eax_in='0x00000001' ecx='0x10000000'/> </feature> <feature name='f16c'> - <cpuid eax_in='0x01' ecx='0x20000000'/> + <cpuid eax_in='0x00000001' ecx='0x20000000'/> </feature> <feature name='rdrand'> - <cpuid eax_in='0x01' ecx='0x40000000'/> + <cpuid eax_in='0x00000001' ecx='0x40000000'/> </feature> <feature name='hypervisor'> - <cpuid eax_in='0x01' ecx='0x80000000'/> + <cpuid eax_in='0x00000001' ecx='0x80000000'/> </feature> <!-- standard features, EDX --> <feature name='fpu'> - <cpuid eax_in='0x01' edx='0x00000001'/> + <cpuid eax_in='0x00000001' edx='0x00000001'/> </feature> <feature name='vme'> - <cpuid eax_in='0x01' edx='0x00000002'/> + <cpuid eax_in='0x00000001' edx='0x00000002'/> </feature> <feature name='de'> - <cpuid eax_in='0x01' edx='0x00000004'/> + <cpuid eax_in='0x00000001' edx='0x00000004'/> </feature> <feature name='pse'> - <cpuid eax_in='0x01' edx='0x00000008'/> + <cpuid eax_in='0x00000001' edx='0x00000008'/> </feature> <feature name='tsc'> - <cpuid eax_in='0x01' edx='0x00000010'/> + <cpuid eax_in='0x00000001' edx='0x00000010'/> </feature> <feature name='msr'> - <cpuid eax_in='0x01' edx='0x00000020'/> + <cpuid eax_in='0x00000001' edx='0x00000020'/> </feature> <feature name='pae'> - <cpuid eax_in='0x01' edx='0x00000040'/> + <cpuid eax_in='0x00000001' edx='0x00000040'/> </feature> <feature name='mce'> - <cpuid eax_in='0x01' edx='0x00000080'/> + <cpuid eax_in='0x00000001' edx='0x00000080'/> </feature> <feature name='cx8'> - <cpuid eax_in='0x01' edx='0x00000100'/> + <cpuid eax_in='0x00000001' edx='0x00000100'/> </feature> <feature name='apic'> - <cpuid eax_in='0x01' edx='0x00000200'/> + <cpuid eax_in='0x00000001' edx='0x00000200'/> </feature> <feature name='sep'> - <cpuid eax_in='0x01' edx='0x00000800'/> + <cpuid eax_in='0x00000001' edx='0x00000800'/> </feature> <feature name='mtrr'> - <cpuid eax_in='0x01' edx='0x00001000'/> + <cpuid eax_in='0x00000001' edx='0x00001000'/> </feature> <feature name='pge'> - <cpuid eax_in='0x01' edx='0x00002000'/> + <cpuid eax_in='0x00000001' edx='0x00002000'/> </feature> <feature name='mca'> - <cpuid eax_in='0x01' edx='0x00004000'/> + <cpuid eax_in='0x00000001' edx='0x00004000'/> </feature> <feature name='cmov'> - <cpuid eax_in='0x01' edx='0x00008000'/> + <cpuid eax_in='0x00000001' edx='0x00008000'/> </feature> <feature name='pat'> - <cpuid eax_in='0x01' edx='0x00010000'/> + <cpuid eax_in='0x00000001' edx='0x00010000'/> </feature> <feature name='pse36'> - <cpuid eax_in='0x01' edx='0x00020000'/> + <cpuid eax_in='0x00000001' edx='0x00020000'/> </feature> <feature name='pn'> - <cpuid eax_in='0x01' edx='0x00040000'/> + <cpuid eax_in='0x00000001' edx='0x00040000'/> </feature> <feature name='clflush'> - <cpuid eax_in='0x01' edx='0x00080000'/> + <cpuid eax_in='0x00000001' edx='0x00080000'/> </feature> <feature name='ds'> - <cpuid eax_in='0x01' edx='0x00200000'/> + <cpuid eax_in='0x00000001' edx='0x00200000'/> </feature> <feature name='acpi'> - <cpuid eax_in='0x01' edx='0x00400000'/> + <cpuid eax_in='0x00000001' edx='0x00400000'/> </feature> <feature name='mmx'> - <cpuid eax_in='0x01' edx='0x00800000'/> + <cpuid eax_in='0x00000001' edx='0x00800000'/> </feature> <feature name='fxsr'> - <cpuid eax_in='0x01' edx='0x01000000'/> + <cpuid eax_in='0x00000001' edx='0x01000000'/> </feature> <feature name='sse'> - <cpuid eax_in='0x01' edx='0x02000000'/> + <cpuid eax_in='0x00000001' edx='0x02000000'/> </feature> <feature name='sse2'> - <cpuid eax_in='0x01' edx='0x04000000'/> + <cpuid eax_in='0x00000001' edx='0x04000000'/> </feature> <feature name='ss'> - <cpuid eax_in='0x01' edx='0x08000000'/> + <cpuid eax_in='0x00000001' edx='0x08000000'/> </feature> <feature name='ht'> - <cpuid eax_in='0x01' edx='0x10000000'/> + <cpuid eax_in='0x00000001' edx='0x10000000'/> </feature> <feature name='tm'> - <cpuid eax_in='0x01' edx='0x20000000'/> + <cpuid eax_in='0x00000001' edx='0x20000000'/> </feature> <feature name='ia64'> - <cpuid eax_in='0x01' edx='0x40000000'/> + <cpuid eax_in='0x00000001' edx='0x40000000'/> </feature> <feature name='pbe'> - <cpuid eax_in='0x01' edx='0x80000000'/> + <cpuid eax_in='0x00000001' edx='0x80000000'/> </feature> <!-- Termal Power and Management --> <feature name='arat'> - <cpuid eax_in='0x06' eax='0x00000004'/> + <cpuid eax_in='0x00000006' eax='0x00000004'/> </feature> <!-- cpuid function 0x7 ecx 0x0 features --> <feature name='fsgsbase'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00000001'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00000001'/> </feature> <feature name='tsc_adjust'> <alias name='tsc-adjust' source='qemu'/> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00000002'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00000002'/> </feature> <feature name='sgx'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00000004'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00000004'/> </feature> <feature name='bmi1'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00000008'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00000008'/> </feature> <feature name='hle'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00000010'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00000010'/> </feature> <feature name='avx2'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00000020'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00000020'/> </feature> <feature name='smep'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00000080'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00000080'/> </feature> <feature name='bmi2'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00000100'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00000100'/> </feature> <feature name='erms'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00000200'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00000200'/> </feature> <feature name='invpcid'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00000400'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00000400'/> </feature> <feature name='rtm'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00000800'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00000800'/> </feature> <feature name='cmt'> <alias name='cqm' source='linux'/> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00001000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00001000'/> </feature> <feature name='mpx'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00004000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00004000'/> </feature> <feature name='avx512f'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00010000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00010000'/> </feature> <feature name='avx512dq'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00020000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00020000'/> </feature> <feature name='rdseed'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00040000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00040000'/> </feature> <feature name='adx'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00080000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00080000'/> </feature> <feature name='smap'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00100000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00100000'/> </feature> <feature name='avx512ifma'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00200000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00200000'/> </feature> <feature name='pcommit'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00400000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00400000'/> </feature> <feature name='clflushopt'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00800000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00800000'/> </feature> <feature name='clwb'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x01000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x01000000'/> </feature> <feature name='intel-pt'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x02000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x02000000'/> </feature> <feature name='avx512pf'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x04000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x04000000'/> </feature> <feature name='avx512er'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x08000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x08000000'/> </feature> <feature name='avx512cd'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x10000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x10000000'/> </feature> <feature name='sha-ni'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x20000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x20000000'/> </feature> <feature name='avx512bw'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x40000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x40000000'/> </feature> <feature name='avx512vl'> - <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x80000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x80000000'/> </feature> <feature name='avx512vbmi'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000002'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x00000002'/> </feature> <feature name='umip'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000004'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x00000004'/> </feature> <feature name='pku'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000008'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x00000008'/> </feature> <feature name='ospke'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000010'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x00000010'/> </feature> <feature name='waitpkg'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000020'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x00000020'/> </feature> <feature name='avx512vbmi2'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000040'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x00000040'/> </feature> <feature name='gfni'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000100'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x00000100'/> </feature> <feature name='vaes'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000200'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x00000200'/> </feature> <feature name='vpclmulqdq'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000400'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x00000400'/> </feature> <feature name='avx512vnni'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000800'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x00000800'/> </feature> <feature name='avx512bitalg'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00001000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x00001000'/> </feature> <feature name='avx512-vpopcntdq'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00004000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x00004000'/> </feature> <feature name='la57'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00010000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x00010000'/> </feature> <feature name='rdpid'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00400000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x00400000'/> </feature> <feature name='bus-lock-detect'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x01000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x01000000'/> </feature> <feature name='cldemote'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x02000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x02000000'/> </feature> <feature name='movdiri'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x08000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x08000000'/> </feature> <feature name='movdir64b'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x10000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x10000000'/> </feature> <feature name='sgxlc'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x40000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x40000000'/> </feature> <feature name='pks'> - <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x80000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x80000000'/> </feature> <feature name='avx512-4vnniw'> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x00000004'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x00000004'/> </feature> <feature name='avx512-4fmaps'> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x00000008'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x00000008'/> </feature> <feature name='fsrm'> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x00000010'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x00000010'/> </feature> <feature name='avx512-vp2intersect'> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x00000100'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x00000100'/> </feature> <feature name='md-clear'> <alias name='md_clear' source='linux'/> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x00000400'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x00000400'/> </feature> <feature name='serialize'> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x00004000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x00004000'/> </feature> <feature name='tsx-ldtrk'> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x00010000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x00010000'/> </feature> <feature name='pconfig'> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x00040000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x00040000'/> </feature> <feature name='arch-lbr'> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x00080000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x00080000'/> </feature> <feature name='amx-bf16'> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x00400000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x00400000'/> </feature> <feature name='avx512-fp16'> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x00800000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x00800000'/> </feature> <feature name='amx-tile'> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x01000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x01000000'/> </feature> <feature name='amx-int8'> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x02000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x02000000'/> </feature> <feature name='spec-ctrl'> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x04000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x04000000'/> </feature> <feature name='stibp'> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x08000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x08000000'/> </feature> <feature name='flush-l1d'> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x10000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x10000000'/> </feature> <feature name='arch-capabilities'> <alias name='arch_capabilities' source='linux'/> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x20000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x20000000'/> </feature> <feature name='core-capability'> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x40000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x40000000'/> </feature> <feature name='ssbd'> - <cpuid eax_in='0x07' ecx_in='0x00' edx='0x80000000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x80000000'/> </feature> <feature name='avx-vnni'> - <cpuid eax_in='0x07' ecx_in='0x01' eax='0x00000010'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000001' eax='0x00000010'/> </feature> <feature name='avx512-bf16'> - <cpuid eax_in='0x07' ecx_in='0x01' eax='0x00000020'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000001' eax='0x00000020'/> </feature> <feature name='cmpccxadd'> - <cpuid eax_in='0x07' ecx_in='0x01' eax='0x00000080'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000001' eax='0x00000080'/> </feature> <feature name='fzrm'> - <cpuid eax_in='0x07' ecx_in='0x01' eax='0x00000400'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000001' eax='0x00000400'/> </feature> <feature name='fsrs'> - <cpuid eax_in='0x07' ecx_in='0x01' eax='0x00000800'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000001' eax='0x00000800'/> </feature> <feature name='fsrc'> - <cpuid eax_in='0x07' ecx_in='0x01' eax='0x00001000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000001' eax='0x00001000'/> </feature> <feature name='amx-fp16'> - <cpuid eax_in='0x07' ecx_in='0x01' eax='0x00200000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000001' eax='0x00200000'/> </feature> <feature name='avx-ifma'> - <cpuid eax_in='0x07' ecx_in='0x01' eax='0x00800000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000001' eax='0x00800000'/> </feature> <feature name='avx-vnni-int8'> - <cpuid eax_in='0x07' ecx_in='0x01' edx='0x00000010'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000001' edx='0x00000010'/> </feature> <feature name='avx-ne-convert'> - <cpuid eax_in='0x07' ecx_in='0x01' edx='0x00000020'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000001' edx='0x00000020'/> </feature> <feature name='prefetchiti'> - <cpuid eax_in='0x07' ecx_in='0x01' edx='0x00004000'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000001' edx='0x00004000'/> </feature> <feature name='mcdt-no'> - <cpuid eax_in='0x07' ecx_in='0x02' edx='0x00000020'/> + <cpuid eax_in='0x00000007' ecx_in='0x00000002' edx='0x00000020'/> </feature> <!-- Processor Extended State Enumeration sub leaf 1 --> <feature name='xsaveopt'> - <cpuid eax_in='0x0d' ecx_in='0x01' eax='0x00000001'/> + <cpuid eax_in='0x0000000d' ecx_in='0x00000001' eax='0x00000001'/> </feature> <feature name='xsavec'> - <cpuid eax_in='0x0d' ecx_in='0x01' eax='0x00000002'/> + <cpuid eax_in='0x0000000d' ecx_in='0x00000001' eax='0x00000002'/> </feature> <feature name='xgetbv1'> - <cpuid eax_in='0x0d' ecx_in='0x01' eax='0x00000004'/> + <cpuid eax_in='0x0000000d' ecx_in='0x00000001' eax='0x00000004'/> </feature> <feature name='xsaves' migratable='no'> - <cpuid eax_in='0x0d' ecx_in='0x01' eax='0x00000008'/> + <cpuid eax_in='0x0000000d' ecx_in='0x00000001' eax='0x00000008'/> </feature> <feature name='xfd'> - <cpuid eax_in='0x0d' ecx_in='0x01' eax='0x00000010'/> + <cpuid eax_in='0x0000000d' ecx_in='0x00000001' eax='0x00000010'/> </feature> <!-- cpuid level 0x0000000f:1 (edx) --> <feature name='mbm_total'> - <cpuid eax_in='0x0f' ecx_in='0x01' edx='0x00000002'/> + <cpuid eax_in='0x0000000f' ecx_in='0x00000001' edx='0x00000002'/> </feature> <feature name='mbm_local'> - <cpuid eax_in='0x0f' ecx_in='0x01' edx='0x00000004'/> + <cpuid eax_in='0x0000000f' ecx_in='0x00000001' edx='0x00000004'/> </feature> <!-- cpuid level 0x00000012 ecx 0x0 features --> <feature name='sgx1'> - <cpuid eax_in='0x12' ecx_in='0x00' eax='0x00000001'/> + <cpuid eax_in='0x00000012' ecx_in='0x00000000' eax='0x00000001'/> </feature> <feature name='sgx2'> - <cpuid eax_in='0x12' ecx_in='0x00' eax='0x00000002'/> + <cpuid eax_in='0x00000012' ecx_in='0x00000000' eax='0x00000002'/> </feature> <feature name='sgx-edeccssa'> - <cpuid eax_in='0x12' ecx_in='0x00' eax='0x00000800'/> + <cpuid eax_in='0x00000012' ecx_in='0x00000000' eax='0x00000800'/> </feature> <feature name='sgx-exinfo'> - <cpuid eax_in='0x12' ecx_in='0x00' ebx='0x00000001'/> + <cpuid eax_in='0x00000012' ecx_in='0x00000000' ebx='0x00000001'/> </feature> <!-- cpuid level 0x00000012 ecx 0x1 features --> <feature name='sgx-debug'> - <cpuid eax_in='0x12' ecx_in='0x01' eax='0x00000002'/> + <cpuid eax_in='0x00000012' ecx_in='0x00000001' eax='0x00000002'/> </feature> <feature name='sgx-mode64'> - <cpuid eax_in='0x12' ecx_in='0x01' eax='0x00000004'/> + <cpuid eax_in='0x00000012' ecx_in='0x00000001' eax='0x00000004'/> </feature> <feature name='sgx-provisionkey'> - <cpuid eax_in='0x12' ecx_in='0x01' eax='0x00000010'/> + <cpuid eax_in='0x00000012' ecx_in='0x00000001' eax='0x00000010'/> </feature> <feature name='sgx-tokenkey'> - <cpuid eax_in='0x12' ecx_in='0x01' eax='0x00000020'/> + <cpuid eax_in='0x00000012' ecx_in='0x00000001' eax='0x00000020'/> </feature> <feature name='sgx-kss'> - <cpuid eax_in='0x12' ecx_in='0x01' eax='0x00000080'/> + <cpuid eax_in='0x00000012' ecx_in='0x00000001' eax='0x00000080'/> </feature> <feature name='sgx-aex-notify'> - <cpuid eax_in='0x12' ecx_in='0x01' eax='0x00000400'/> + <cpuid eax_in='0x00000012' ecx_in='0x00000001' eax='0x00000400'/> </feature> <!-- cpuid level 0x00000014 ecx 0x0 features --> <feature name='intel-pt-lip'> - <cpuid eax_in='0x14' ecx_in='0x00' ecx='0x80000000'/> + <cpuid eax_in='0x00000014' ecx_in='0x00000000' ecx='0x80000000'/> </feature> <!-- extended features, ECX --> @@ -734,51 +734,51 @@ <!-- IA32_CORE_CAPABILITIES features --> <feature name='split-lock-detect'> - <msr index='0xcf' edx='0x00000000' eax='0x00000020'/> + <msr index='0x000000cf' edx='0x00000000' eax='0x00000020'/> </feature> <!-- IA32_ARCH_CAPABILITIES features --> <feature name='rdctl-no'> - <msr index='0x10a' edx='0x00000000' eax='0x00000001'/> + <msr index='0x0000010a' edx='0x00000000' eax='0x00000001'/> </feature> <feature name='ibrs-all'> - <msr index='0x10a' edx='0x00000000' eax='0x00000002'/> + <msr index='0x0000010a' edx='0x00000000' eax='0x00000002'/> </feature> <feature name='rsba'> - <msr index='0x10a' edx='0x00000000' eax='0x00000004'/> + <msr index='0x0000010a' edx='0x00000000' eax='0x00000004'/> </feature> <feature name='skip-l1dfl-vmentry'> - <msr index='0x10a' edx='0x00000000' eax='0x00000008'/> + <msr index='0x0000010a' edx='0x00000000' eax='0x00000008'/> </feature> <feature name='ssb-no'> - <msr index='0x10a' edx='0x00000000' eax='0x00000010'/> + <msr index='0x0000010a' edx='0x00000000' eax='0x00000010'/> </feature> <feature name='mds-no'> - <msr index='0x10a' edx='0x00000000' eax='0x00000020'/> + <msr index='0x0000010a' edx='0x00000000' eax='0x00000020'/> </feature> <feature name='pschange-mc-no'> - <msr index='0x10a' edx='0x00000000' eax='0x00000040'/> + <msr index='0x0000010a' edx='0x00000000' eax='0x00000040'/> </feature> <feature name='tsx-ctrl'> - <msr index='0x10a' edx='0x00000000' eax='0x00000080'/> + <msr index='0x0000010a' edx='0x00000000' eax='0x00000080'/> </feature> <feature name='taa-no'> - <msr index='0x10a' edx='0x00000000' eax='0x00000100'/> + <msr index='0x0000010a' edx='0x00000000' eax='0x00000100'/> </feature> <feature name='sbdr-ssdp-no'> - <msr index='0x10a' edx='0x00000000' eax='0x00002000'/> + <msr index='0x0000010a' edx='0x00000000' eax='0x00002000'/> </feature> <feature name='fbsdp-no'> - <msr index='0x10a' edx='0x00000000' eax='0x00004000'/> + <msr index='0x0000010a' edx='0x00000000' eax='0x00004000'/> </feature> <feature name='psdp-no'> - <msr index='0x10a' edx='0x00000000' eax='0x00008000'/> + <msr index='0x0000010a' edx='0x00000000' eax='0x00008000'/> </feature> <feature name='fb-clear'> - <msr index='0x10a' edx='0x00000000' eax='0x00020000'/> + <msr index='0x0000010a' edx='0x00000000' eax='0x00020000'/> </feature> <feature name='pbrsb-no'> - <msr index='0x10a' edx='0x00000000' eax='0x01000000'/> + <msr index='0x0000010a' edx='0x00000000' eax='0x01000000'/> </feature> </cpus> -- 2.39.2

Signed-off-by: Tim Wiederhake <twiederh@redhat.com> --- src/cpu_map/x86_features.xml | 40 +++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml index f53ec0d835..33e24f145f 100644 --- a/src/cpu_map/x86_features.xml +++ b/src/cpu_map/x86_features.xml @@ -5,7 +5,7 @@ --> <cpus> - <!-- standard features, ECX --> + <!-- cpuid level 0x00000001 (ecx) --> <feature name='pni'> <alias name='sse3' source='qemu'/> <cpuid eax_in='0x00000001' ecx='0x00000001'/> @@ -104,7 +104,7 @@ <cpuid eax_in='0x00000001' ecx='0x80000000'/> </feature> - <!-- standard features, EDX --> + <!-- cpuid level 0x00000001 (edx) --> <feature name='fpu'> <cpuid eax_in='0x00000001' edx='0x00000001'/> </feature> @@ -196,12 +196,12 @@ <cpuid eax_in='0x00000001' edx='0x80000000'/> </feature> - <!-- Termal Power and Management --> + <!-- cpuid level 0x00000006 (eax) --> <feature name='arat'> <cpuid eax_in='0x00000006' eax='0x00000004'/> </feature> - <!-- cpuid function 0x7 ecx 0x0 features --> + <!-- cpuid level 0x00000007, ecx 0x0000 (ebx) --> <feature name='fsgsbase'> <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00000001'/> </feature> @@ -292,6 +292,7 @@ <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x80000000'/> </feature> + <!-- cpuid level 0x00000007, ecx 0x0000 (ecx) --> <feature name='avx512vbmi'> <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x00000002'/> </feature> @@ -353,6 +354,7 @@ <cpuid eax_in='0x00000007' ecx_in='0x00000000' ecx='0x80000000'/> </feature> + <!-- cpuid level 0x00000007, ecx 0x0000 (edx) --> <feature name='avx512-4vnniw'> <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x00000004'/> </feature> @@ -413,6 +415,7 @@ <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x80000000'/> </feature> + <!-- cpuid level 0x00000007, ecx 0x0001 (eax) --> <feature name='avx-vnni'> <cpuid eax_in='0x00000007' ecx_in='0x00000001' eax='0x00000010'/> </feature> @@ -438,6 +441,7 @@ <cpuid eax_in='0x00000007' ecx_in='0x00000001' eax='0x00800000'/> </feature> + <!-- cpuid level 0x00000007, ecx 0x0001 (edx) --> <feature name='avx-vnni-int8'> <cpuid eax_in='0x00000007' ecx_in='0x00000001' edx='0x00000010'/> </feature> @@ -448,11 +452,12 @@ <cpuid eax_in='0x00000007' ecx_in='0x00000001' edx='0x00004000'/> </feature> + <!-- cpuid level 0x00000007, ecx 0x0002 (edx) --> <feature name='mcdt-no'> <cpuid eax_in='0x00000007' ecx_in='0x00000002' edx='0x00000020'/> </feature> - <!-- Processor Extended State Enumeration sub leaf 1 --> + <!-- cpuid level 0x0000000d, ecx 0x0001 (eax) --> <feature name='xsaveopt'> <cpuid eax_in='0x0000000d' ecx_in='0x00000001' eax='0x00000001'/> </feature> @@ -469,7 +474,7 @@ <cpuid eax_in='0x0000000d' ecx_in='0x00000001' eax='0x00000010'/> </feature> - <!-- cpuid level 0x0000000f:1 (edx) --> + <!-- cpuid level 0x0000000f, ecx 0x0001 (edx) --> <feature name='mbm_total'> <cpuid eax_in='0x0000000f' ecx_in='0x00000001' edx='0x00000002'/> </feature> @@ -477,7 +482,7 @@ <cpuid eax_in='0x0000000f' ecx_in='0x00000001' edx='0x00000004'/> </feature> - <!-- cpuid level 0x00000012 ecx 0x0 features --> + <!-- cpuid level 0x00000012, ecx 0x0000 (eax) --> <feature name='sgx1'> <cpuid eax_in='0x00000012' ecx_in='0x00000000' eax='0x00000001'/> </feature> @@ -488,11 +493,12 @@ <cpuid eax_in='0x00000012' ecx_in='0x00000000' eax='0x00000800'/> </feature> + <!-- cpuid level 0x00000012, ecx 0x0000 (ebx) --> <feature name='sgx-exinfo'> <cpuid eax_in='0x00000012' ecx_in='0x00000000' ebx='0x00000001'/> </feature> - <!-- cpuid level 0x00000012 ecx 0x1 features --> + <!-- cpuid level 0x00000012, ecx 0x0001 (eax) --> <feature name='sgx-debug'> <cpuid eax_in='0x00000012' ecx_in='0x00000001' eax='0x00000002'/> </feature> @@ -512,12 +518,12 @@ <cpuid eax_in='0x00000012' ecx_in='0x00000001' eax='0x00000400'/> </feature> - <!-- cpuid level 0x00000014 ecx 0x0 features --> + <!-- cpuid level 0x00000014, ecx 0x0000 (ecx) --> <feature name='intel-pt-lip'> <cpuid eax_in='0x00000014' ecx_in='0x00000000' ecx='0x80000000'/> </feature> - <!-- extended features, ECX --> + <!-- cpuid level 0x80000001 (ecx) --> <feature name='lahf_lm'> <alias name='lahf-lm' source='qemu'/> <cpuid eax_in='0x80000001' ecx='0x00000001'/> @@ -593,7 +599,7 @@ <cpuid eax_in='0x80000001' ecx='0x01000000'/> </feature> - <!-- extended features, EDX --> + <!-- cpuid level 0x80000001 (edx) --> <feature name='syscall'> <cpuid eax_in='0x80000001' edx='0x00000800'/> </feature> @@ -626,12 +632,12 @@ <cpuid eax_in='0x80000001' edx='0x80000000'/> </feature> - <!-- Advanced Power Management edx features --> + <!-- cpuid level 0x80000007 (edx) --> <feature name='invtsc' migratable='no'> <cpuid eax_in='0x80000007' edx='0x00000100'/> </feature> - <!-- More AMD-specific features --> + <!-- cpuid level 0x80000008 (ebx) --> <feature name='clzero'> <cpuid eax_in='0x80000008' ebx='0x00000001'/> </feature> @@ -666,7 +672,7 @@ <cpuid eax_in='0x80000008' ebx='0x10000000'/> </feature> - <!-- SVM features --> + <!-- cpuid level 0x8000000a (edx) --> <feature name='npt'> <cpuid eax_in='0x8000000a' edx='0x00000001'/> </feature> @@ -718,7 +724,7 @@ <cpuid eax_in='0x8000000a' edx='0x10000000'/> </feature> - <!-- cpuid level 0x80000021 ecx 0x0 features --> + <!-- cpuid level 0x80000021 (eax) --> <feature name='no-nested-data-bp'> <cpuid eax_in='0x80000021' eax='0x00000001'/> </feature> @@ -732,12 +738,12 @@ <cpuid eax_in='0x80000021' eax='0x00000100'/> </feature> - <!-- IA32_CORE_CAPABILITIES features --> + <!-- msr 0x000000cf --> <feature name='split-lock-detect'> <msr index='0x000000cf' edx='0x00000000' eax='0x00000020'/> </feature> - <!-- IA32_ARCH_CAPABILITIES features --> + <!-- msr 0x0000010a --> <feature name='rdctl-no'> <msr index='0x0000010a' edx='0x00000000' eax='0x00000001'/> </feature> -- 2.39.2

Signed-off-by: Tim Wiederhake <twiederh@redhat.com> --- src/cpu_map/x86_features.xml | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml index 33e24f145f..2b770818ff 100644 --- a/src/cpu_map/x86_features.xml +++ b/src/cpu_map/x86_features.xml @@ -7,11 +7,9 @@ <cpus> <!-- cpuid level 0x00000001 (ecx) --> <feature name='pni'> - <alias name='sse3' source='qemu'/> <cpuid eax_in='0x00000001' ecx='0x00000001'/> </feature> <feature name='pclmuldq'> - <alias name='pclmulqdq' source='qemu'/> <cpuid eax_in='0x00000001' ecx='0x00000002'/> </feature> <feature name='dtes64'> @@ -21,7 +19,6 @@ <cpuid eax_in='0x00000001' ecx='0x00000008'/> </feature> <feature name='ds_cpl'> - <alias name='ds-cpl' source='qemu'/> <cpuid eax_in='0x00000001' ecx='0x00000010'/> </feature> <feature name='vmx'> @@ -61,13 +58,9 @@ <cpuid eax_in='0x00000001' ecx='0x00040000'/> </feature> <feature name='sse4.1'> - <alias name='sse4-1' source='qemu'/> - <alias name='sse4_1' source='qemu'/> <cpuid eax_in='0x00000001' ecx='0x00080000'/> </feature> <feature name='sse4.2'> - <alias name='sse4-2' source='qemu'/> - <alias name='sse4_2' source='qemu'/> <cpuid eax_in='0x00000001' ecx='0x00100000'/> </feature> <feature name='x2apic'> @@ -206,7 +199,6 @@ <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00000001'/> </feature> <feature name='tsc_adjust'> - <alias name='tsc-adjust' source='qemu'/> <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00000002'/> </feature> <feature name='sgx'> @@ -237,7 +229,6 @@ <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00000800'/> </feature> <feature name='cmt'> - <alias name='cqm' source='linux'/> <cpuid eax_in='0x00000007' ecx_in='0x00000000' ebx='0x00001000'/> </feature> <feature name='mpx'> @@ -368,7 +359,6 @@ <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x00000100'/> </feature> <feature name='md-clear'> - <alias name='md_clear' source='linux'/> <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x00000400'/> </feature> <feature name='serialize'> @@ -405,7 +395,6 @@ <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x10000000'/> </feature> <feature name='arch-capabilities'> - <alias name='arch_capabilities' source='linux'/> <cpuid eax_in='0x00000007' ecx_in='0x00000000' edx='0x20000000'/> </feature> <feature name='core-capability'> @@ -525,11 +514,9 @@ <!-- cpuid level 0x80000001 (ecx) --> <feature name='lahf_lm'> - <alias name='lahf-lm' source='qemu'/> <cpuid eax_in='0x80000001' ecx='0x00000001'/> </feature> <feature name='cmp_legacy'> - <alias name='cmp-legacy' source='qemu'/> <cpuid eax_in='0x80000001' ecx='0x00000002'/> </feature> <feature name='svm'> @@ -581,7 +568,6 @@ <cpuid eax_in='0x80000001' ecx='0x00040000'/> </feature> <feature name='nodeid_msr'> - <alias name='nodeid-msr' source='qemu'/> <cpuid eax_in='0x80000001' ecx='0x00080000'/> </feature> <feature name='tbm'> @@ -591,11 +577,9 @@ <cpuid eax_in='0x80000001' ecx='0x00400000'/> </feature> <feature name='perfctr_core'> - <alias name='perfctr-core' source='qemu'/> <cpuid eax_in='0x80000001' ecx='0x00800000'/> </feature> <feature name='perfctr_nb'> - <alias name='perfctr-nb' source='qemu'/> <cpuid eax_in='0x80000001' ecx='0x01000000'/> </feature> @@ -604,15 +588,12 @@ <cpuid eax_in='0x80000001' edx='0x00000800'/> </feature> <feature name='nx'> - <alias name='xd' source='qemu'/> <cpuid eax_in='0x80000001' edx='0x00100000'/> </feature> <feature name='mmxext'> <cpuid eax_in='0x80000001' edx='0x00400000'/> </feature> <feature name='fxsr_opt'> - <alias name='ffxsr' source='qemu'/> - <alias name='fxsr-opt' source='qemu'/> <cpuid eax_in='0x80000001' edx='0x02000000'/> </feature> <feature name='pdpe1gb'> @@ -622,7 +603,6 @@ <cpuid eax_in='0x80000001' edx='0x08000000'/> </feature> <feature name='lm'> - <alias name='i64' source='qemu'/> <cpuid eax_in='0x80000001' edx='0x20000000'/> </feature> <feature name='3dnowext'> @@ -680,19 +660,15 @@ <cpuid eax_in='0x8000000a' edx='0x00000002'/> </feature> <feature name='svm-lock'> - <alias name='svm_lock' source='qemu'/> <cpuid eax_in='0x8000000a' edx='0x00000004'/> </feature> <feature name='nrip-save'> - <alias name='nrip_save' source='qemu'/> <cpuid eax_in='0x8000000a' edx='0x00000008'/> </feature> <feature name='tsc-scale'> - <alias name='tsc_scale' source='qemu'/> <cpuid eax_in='0x8000000a' edx='0x00000010'/> </feature> <feature name='vmcb-clean'> - <alias name='vmcb_clean' source='qemu'/> <cpuid eax_in='0x8000000a' edx='0x00000020'/> </feature> <feature name='flushbyasid'> @@ -702,7 +678,6 @@ <cpuid eax_in='0x8000000a' edx='0x00000080'/> </feature> <feature name='pause-filter'> - <alias name='pause_filter' source='qemu'/> <cpuid eax_in='0x8000000a' edx='0x00000400'/> </feature> <feature name='pfthreshold'> -- 2.39.2

On Tue, Jul 25, 2023 at 14:53:00 +0200, Tim Wiederhake wrote: Please don't skip writing the justification into the commit message. I tried finding why this became unused or how this was intended to be used and came across this commit message: commit 1d946ac79416f3731262c059c35a234c95285d46 Author: Tim Wiederhake <twiederh@redhat.com> Date: Fri Oct 14 16:30:47 2022 +0200 cpu: make x86 feature alias names machine readable Signed-off-by: Tim Wiederhake <twiederh@redhat.com> Reviewed-by: Jiri Denemark <jdenemar@redhat.com> Which says as much as this removing it. While removal of this is okay it makes it REALLY hard to figure out the intentions after some time.

Signed-off-by: Tim Wiederhake <twiederh@redhat.com> --- src/cpu_map/x86_features.py | 119 ++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100755 src/cpu_map/x86_features.py diff --git a/src/cpu_map/x86_features.py b/src/cpu_map/x86_features.py new file mode 100755 index 0000000000..5bc7e06216 --- /dev/null +++ b/src/cpu_map/x86_features.py @@ -0,0 +1,119 @@ +#!/bin/env python3 + +import os +import pycpuinfo + +non_migratable = ( + "invtsc", + "xsaves", +) + +family_x86 = pycpuinfo.Family.find("x86") + +features_cpuid = dict() +features_msr = dict() + + +def cpuid_to_reg_value(data): + if data[2]: + return "eax", data[2] + if data[3]: + return "ebx", data[3] + if data[4]: + return "ecx", data[4] + if data[5]: + return "edx", data[5] + + +def add_cpuid(feature): + name = feature.name("libvirt") + data = feature.extra_x86_cpuid() + reg_value = cpuid_to_reg_value(data) + + if data[0] not in features_cpuid: + features_cpuid[data[0]] = dict() + + if data[1] not in features_cpuid[data[0]]: + features_cpuid[data[0]][data[1]] = dict() + + if reg_value[0] not in features_cpuid[data[0]][data[1]]: + features_cpuid[data[0]][data[1]][reg_value[0]] = set() + + features_cpuid[data[0]][data[1]][reg_value[0]].add(( + reg_value[1], + name, + )) + + +def add_msr(feature): + data = feature.extra_x86_msr() + if data[0] not in features_msr: + features_msr[data[0]] = set() + + features_msr[data[0]].add(( + data[2], + data[1], + feature.name("libvirt"), + )) + + +def print_feature_cpuid(f): + tmpl_ecx = ( + " <!-- cpuid level 0x{0:08x}, ecx 0x{1:04x} ({2}) -->\n", + " <cpuid eax_in='0x{0:08x}' ecx_in='0x{1:08x}' {2}='0x{3:08x}'/>\n" + ) + tmpl_any = ( + " <!-- cpuid level 0x{0:08x} ({2}) -->\n", + " <cpuid eax_in='0x{0:08x}' {2}='0x{3:08x}'/>\n" + ) + + for eax in sorted(features_cpuid): + for ecx in sorted(features_cpuid[eax]): + if ecx == pycpuinfo.x86.CPUINFO_X86_CPUID_ECX_NONE: + template = tmpl_any + else: + template = tmpl_ecx + + for reg in sorted(features_cpuid[eax][ecx]): + f.write(template[0].format(eax, ecx, reg)) + for data in sorted(features_cpuid[eax][ecx][reg]): + extra = "" + if data[1] in non_migratable: + extra = " migratable='no'" + f.write(" <feature name='{}'{}>\n".format(data[1], extra)) + f.write(template[1].format(eax, ecx, reg, data[0])) + f.write(" </feature>\n") + f.write("\n") + + +def print_feature_msr(f): + template = " <msr index='0x{:08x}' edx='0x{:08x}' eax='0x{:08x}'/>\n" + for msr in sorted(features_msr): + f.write(" <!-- msr 0x{:08x} -->\n".format(msr)) + for data in sorted(features_msr[msr]): + f.write(" <feature name='{}'>\n".format(data[2])) + f.write(template.format(msr, data[0], data[1])) + f.write(" </feature>\n") + f.write("\n") + + +for feature in pycpuinfo.features(): + if feature.family() != family_x86: + continue + + if feature.extra_x86_cpuid(): + add_cpuid(feature) + elif feature.extra_x86_msr(): + add_msr(feature) + + +filename = os.path.join(os.path.dirname(__file__), "x86_features.xml") +with open(filename, "tw") as f: + f.write( + "<!--\n After adding new features, update existing test files with\n" + "\n tests/cputestdata/cpu-data.py diff tests/cputestdata/x86_64-" + "cpuid-*.json\n\n-->\n") + f.write("<cpus>\n") + print_feature_cpuid(f) + print_feature_msr(f) + f.write("</cpus>\n") -- 2.39.2
participants (2)
-
Peter Krempa
-
Tim Wiederhake