On 7/18/19 4:52 PM, Paolo Bonzini wrote: > On 18/07/19 15:45, Denis V. Lunev wrote: >> There are the following flags available in libvirt inside cpu_map.xm >> <feature name='cvt16'> >> <cpuid function='0x80000001' ecx='0x00040000'/> >> </feature> >> <feature name='cmt'> <!-- cqm --> >> <cpuid eax_in='0x07' ecx_in='0x00' ebx='0x00001000'/> >> </feature> >> We have faced the problem that QEMU does not start once these flags are >> present in the domain.xml. >> >> This patch just adds proper names into the map. >> >> Signed-off-by: Denis V. Lunev <d...@openvz.org> >> CC: Paolo Bonzini <pbonz...@redhat.com> >> CC: Richard Henderson <r...@twiddle.net> >> CC: Eduardo Habkost <ehabk...@redhat.com> >> CC: Nikolay Shirokovskiy <nshirokovs...@virtuozzo.com> >> CC: Peter Krempa <pkre...@redhat.com> >> CC: Daniel P. Berrangé <berra...@redhat.com> >> --- >> target/i386/cpu.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/target/i386/cpu.c b/target/i386/cpu.c >> index 805ce95247..88ba4dad47 100644 >> --- a/target/i386/cpu.c >> +++ b/target/i386/cpu.c >> @@ -870,7 +870,7 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] >> = { >> "lahf-lm", "cmp-legacy", "svm", "extapic", >> "cr8legacy", "abm", "sse4a", "misalignsse", >> "3dnowprefetch", "osvw", "ibs", "xop", >> - "skinit", "wdt", NULL, "lwp", >> + "skinit", "wdt", "cvt16", "lwp", >> "fma4", "tce", NULL, "nodeid-msr", >> NULL, "tbm", "topoext", "perfctr-core", >> "perfctr-nb", NULL, NULL, NULL, >> @@ -1044,7 +1044,7 @@ static FeatureWordInfo >> feature_word_info[FEATURE_WORDS] = { >> "fsgsbase", "tsc-adjust", NULL, "bmi1", >> "hle", "avx2", NULL, "smep", >> "bmi2", "erms", "invpcid", "rtm", >> - NULL, NULL, "mpx", NULL, >> + "cmt", NULL, "mpx", NULL, >> "avx512f", "avx512dq", "rdseed", "adx", >> "smap", "avx512ifma", "pcommit", "clflushopt", >> "clwb", "intel-pt", "avx512pf", "avx512er", >> > Oops, nice catch! I've queued the patch for 4.1. > > Paolo I have written small script to find differences between CPU features in QEMU and libvirt.
#!/bin/bash LIST=`awk "/name/{split(\\\$2, arr, \"'\"); print arr[2]}" x86_features.xml` for feat in $LIST; do var=`grep \"$feat\" target/i386/cpu.c` if [ -z "$var" ]; then echo $feat fi done There are the following list of features present in libvirt and missed in QEMU: osxsave - removed in qemu in f1a23522b03 ospke - removed in qemu in 9ccb9784b57 pconfig - removed in qemu in 712f807e196. mbm_total mbm_local Two last features are described as follows: <!-- cpuid level 0x0000000f:1 (edx) --> <feature name='mbm_total'> <cpuid eax_in='0x0f' ecx_in='0x01' edx='0x00000002'/> </feature> <feature name='mbm_local'> <cpuid eax_in='0x0f' ecx_in='0x01' edx='0x00000004'/> </feature> This leaf is not supported in QEMU at all. According to Intel 64 and IA-32 Architecture Developer manual vol. 2a these bits are used for EDX Bit 00: Supports L3 occupancy monitoring if 1. Bit 01: Supports L3 Total Bandwidth monitoring if 1. Bit 02: Supports L3 Local Bandwidth monitoring if 1. Bits 31 - 03: Reserved. Thus technically these 5 bits are able to produce problems for QEMU if they will be found in domain.xml Den