i386: Use designated initializers on feat_names arrays
PATCH 1/1 i386: Use designated initializers on feat_names arrays
Using designated initializers for feat_names allows us to omit NULL entries, and makes mistakes easier to spot (especially when cherry-picking or merging commits).
Arrays that have very few entries were changed to have a designator for every element. Arrays that have almost every item present were changed to have one designator every 4 entries. Arrays that had only NULL entries had the initializers completely removed.
--- target/i386/cpu.c | 215 ++++++++++++++++++------------------------------------ 1 file changed, 73 insertions(+), 142 deletions(-)
target/i386/cpu.c +73 -142
@@ -268,28 +268,28 @@ typedef struct FeatureWordInfo {static FeatureWordInfo feature_word_info[FEATURE_WORDS ] = { [FEAT_1_EDX ] = { .feat_names = { -"fpu" ,"vme" ,"de" ,"pse" , -"tsc" ,"msr" ,"pae" ,"mce" , -"cx8" ,"apic" ,NULL ,"sep" , -"mtrr" ,"pge" ,"mca" ,"cmov" , -"pat" ,"pse36" ,"pn" /* Intel psn */ ,"clflush" /* Intel clfsh */ , -NULL ,"ds" /* Intel dts */ ,"acpi" ,"mmx" , -"fxsr" ,"sse" ,"sse2" ,"ss" , -"ht" /* Intel htt */ ,"tm" ,"ia64" ,"pbe" , + [0 ] ="fpu" ,"vme" ,"de" ,"pse" , + [4 ] ="tsc" ,"msr" ,"pae" ,"mce" , + [8 ] ="cx8" ,"apic" ,NULL ,"sep" , + [12 ] ="mtrr" ,"pge" ,"mca" ,"cmov" , + [16 ] ="pat" ,"pse36" ,"pn" ,"clflush" , + [20 ] =NULL ,"ds" /* Intel dts */ ,"acpi" ,"mmx" , + [24 ] ="fxsr" ,"sse" ,"sse2" ,"ss" , + [28 ] ="ht" ,"tm" ,"ia64" ,"pbe" , }, .cpuid_eax =1 , .cpuid_reg =R_EDX , .tcg_features =TCG_FEATURES , }, [FEAT_1_ECX ] = { .feat_names = { -"pni" /* Intel,AMD sse3 */ ,"pclmulqdq" ,"dtes64" ,"monitor" , -"ds-cpl" ,"vmx" ,"smx" ,"est" , -"tm2" ,"ssse3" ,"cid" ,NULL , -"fma" ,"cx16" ,"xtpr" ,"pdcm" , -NULL ,"pcid" ,"dca" ,"sse4.1" , -"sse4.2" ,"x2apic" ,"movbe" ,"popcnt" , -"tsc-deadline" ,"aes" ,"xsave" ,"osxsave" , -"avx" ,"f16c" ,"rdrand" ,"hypervisor" , + [0 ] ="pni" /* Intel,AMD sse3 */ ,"pclmulqdq" ,"dtes64" ,"monitor" , + [4 ] ="ds-cpl" ,"vmx" ,"smx" ,"est" , + [8 ] ="tm2" ,"ssse3" ,"cid" ,NULL , + [12 ] ="fma" ,"cx16" ,"xtpr" ,"pdcm" , + [16 ] =NULL ,"pcid" ,"dca" ,"sse4.1" , + [20 ] ="sse4.2" ,"x2apic" ,"movbe" ,"popcnt" , + [24 ] ="tsc-deadline" ,"aes" ,"xsave" ,"osxsave" , + [28 ] ="avx" ,"f16c" ,"rdrand" ,"hypervisor" , }, .cpuid_eax =1 , .cpuid_reg =R_ECX , .tcg_features =TCG_EXT_FEATURES ,
@@ -301,131 +301,87 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { */ [FEAT_8000_0001_EDX] = { .feat_names = { -NULL /* fpu */ ,NULL /* vme */ ,NULL /* de */ ,NULL /* pse */ , -NULL /* tsc */ ,NULL /* msr */ ,NULL /* pae */ ,NULL /* mce */ , -NULL /* cx8 */ ,NULL /* apic */ ,NULL ,"syscall" , -NULL /* mtrr */ ,NULL /* pge */ ,NULL /* mca */ ,NULL /* cmov */ , -NULL /* pat */ ,NULL /* pse36 */ ,NULL ,NULL /* Linux mp */ , -"nx" ,NULL ,"mmxext" ,NULL /* mmx */ , -NULL /* fxsr */ ,"fxsr-opt" ,"pdpe1gb" ,"rdtscp" , - NULL, "lm", "3dnowext", "3dnow", + [11] = "syscall", + [20] = "nx", + [22] = "mmxext", + [25] = "fxsr-opt", + [26] = "pdpe1gb", + [27] = "rdtscp", + [29] = "lm", + [30] = "3dnowext", + [31] = "3dnow", }, .cpuid_eax = 0x80000001, .cpuid_reg = R_EDX, .tcg_features = TCG_EXT2_FEATURES, }, [FEAT_8000_0001_ECX] = { .feat_names = { -"lahf-lm" ,"cmp-legacy" ,"svm" ,"extapic" , -"cr8legacy" ,"abm" ,"sse4a" ,"misalignsse" , -"3dnowprefetch" ,"osvw" ,"ibs" ,"xop" , -"skinit" ,"wdt" ,NULL ,"lwp" , -"fma4" ,"tce" ,NULL ,"nodeid-msr" , -NULL ,"tbm" ,"topoext" ,"perfctr-core" , -"perfctr-nb" ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [0] = "lahf-lm", "cmp-legacy", "svm", "extapic", + [4] = "cr8legacy", "abm", "sse4a", "misalignsse", + [8] = "3dnowprefetch", "osvw", "ibs", "xop", + [12] = "skinit", "wdt", NULL, "lwp", + [16] = "fma4", "tce", NULL, "nodeid-msr", + [20] = NULL, "tbm", "topoext", "perfctr-core", + [24] = "perfctr-nb", NULL, NULL, NULL, }, .cpuid_eax = 0x80000001, .cpuid_reg = R_ECX, .tcg_features = TCG_EXT3_FEATURES, }, [FEAT_C000_0001_EDX] = { .feat_names = { -NULL ,NULL ,"xstore" ,"xstore-en" , -NULL ,NULL ,"xcrypt" ,"xcrypt-en" , -"ace2" ,"ace2-en" ,"phe" ,"phe-en" , -"pmm" ,"pmm-en" ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [0] = NULL, NULL, "xstore", "xstore-en", + [4] = NULL, NULL, "xcrypt", "xcrypt-en", + [8] = "ace2", "ace2-en", "phe", "phe-en", + [12] = "pmm", "pmm-en", NULL, NULL, }, .cpuid_eax = 0xC0000001, .cpuid_reg = R_EDX, .tcg_features = TCG_EXT4_FEATURES, }, [FEAT_KVM] = { .feat_names = { -"kvmclock" ,"kvm-nopiodelay" ,"kvm-mmu" ,"kvmclock" , -"kvm-asyncpf" ,"kvm-steal-time" ,"kvm-pv-eoi" ,"kvm-pv-unhalt" , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -"kvmclock-stable-bit" ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [KVM_FEATURE_CLOCKSOURCE] = "kvmclock", + [KVM_FEATURE_NOP_IO_DELAY] = "kvm-nopiodelay", + [KVM_FEATURE_MMU_OP] = "kvm-mmu", + [KVM_FEATURE_CLOCKSOURCE2] = "kvmclock", + [KVM_FEATURE_ASYNC_PF] = "kvm-asyncpf", + [KVM_FEATURE_STEAL_TIME] = "kvm-steal-time", + [KVM_FEATURE_PV_EOI] = "kvm-pv-eoi", + [KVM_FEATURE_PV_UNHALT] = "kvm-pv-unhalt", + [KVM_FEATURE_CLOCKSOURCE_STABLE_BIT] = "kvmclock-stable-bit", }, .cpuid_eax = KVM_CPUID_FEATURES, .cpuid_reg = R_EAX, .tcg_features = TCG_KVM_FEATURES, }, [FEAT_HYPERV_EAX] = { - .feat_names = { -NULL /* hv_msr_vp_runtime_access */ ,NULL /* hv_msr_time_refcount_access */ , -NULL /* hv_msr_synic_access */ ,NULL /* hv_msr_stimer_access */ , -NULL /* hv_msr_apic_access */ ,NULL /* hv_msr_hypercall_access */ , -NULL /* hv_vpindex_access */ ,NULL /* hv_msr_reset_access */ , -NULL /* hv_msr_stats_access */ ,NULL /* hv_reftsc_access */ , -NULL /* hv_msr_idle_access */ ,NULL /* hv_msr_frequency_access */ , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, - }, .cpuid_eax = 0x40000003, .cpuid_reg = R_EAX, }, [FEAT_HYPERV_EBX] = { - .feat_names = { -NULL /* hv_create_partitions */ ,NULL /* hv_access_partition_id */ , -NULL /* hv_access_memory_pool */ ,NULL /* hv_adjust_message_buffers */ , -NULL /* hv_post_messages */ ,NULL /* hv_signal_events */ , -NULL /* hv_create_port */ ,NULL /* hv_connect_port */ , -NULL /* hv_access_stats */ ,NULL ,NULL ,NULL /* hv_debugging */ , -NULL /* hv_cpu_power_management */ ,NULL /* hv_configure_profiler */ , -NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, - }, .cpuid_eax = 0x40000003, .cpuid_reg = R_EBX, }, [FEAT_HYPERV_EDX] = { - .feat_names = { -NULL /* hv_mwait */ ,NULL /* hv_guest_debugging */ , -NULL /* hv_perf_monitor */ ,NULL /* hv_cpu_dynamic_part */ , -NULL /* hv_hypercall_params_xmm */ ,NULL /* hv_guest_idle_state */ , -NULL ,NULL , -NULL ,NULL ,NULL /* hv_guest_crash_msr */ ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, - }, .cpuid_eax = 0x40000003, .cpuid_reg = R_EDX, }, [FEAT_SVM] = { .feat_names = { -"npt" ,"lbrv" ,"svm-lock" ,"nrip-save" , -"tsc-scale" ,"vmcb-clean" ,"flushbyasid" ,"decodeassists" , -NULL ,NULL ,"pause-filter" ,NULL , -"pfthreshold" ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [0] = "npt", "lbrv", "svm-lock", "nrip-save", + [4] = "tsc-scale", "vmcb-clean", "flushbyasid", "decodeassists", + [8] = NULL, NULL, "pause-filter", NULL, + [12] = "pfthreshold", NULL, NULL, NULL, + }, .cpuid_eax = 0x8000000A, .cpuid_reg = R_EDX, .tcg_features = TCG_SVM_FEATURES, }, [FEAT_7_0_EBX] = { .feat_names = { -"fsgsbase" ,"tsc-adjust" ,NULL ,"bmi1" , -"hle" ,"avx2" ,NULL ,"smep" , -"bmi2" ,"erms" ,"invpcid" ,"rtm" , -NULL ,NULL ,"mpx" ,NULL , -"avx512f" ,"avx512dq" ,"rdseed" ,"adx" , -"smap" ,"avx512ifma" ,"pcommit" ,"clflushopt" , -"clwb" ,NULL ,"avx512pf" ,"avx512er" , - "avx512cd", "sha-ni", "avx512bw", "avx512vl", + [0] = "fsgsbase", "tsc-adjust", NULL, "bmi1", + [4] = "hle", "avx2", NULL, "smep", + [8] = "bmi2", "erms", "invpcid", "rtm", + [12] = NULL, NULL, "mpx", NULL, + [16] = "avx512f", "avx512dq", "rdseed", "adx", + [20] = "smap", "avx512ifma", "pcommit", "clflushopt", + [24] = "clwb", NULL, "avx512pf", "avx512er", + [28] = "avx512cd", "sha-ni", "avx512bw", "avx512vl", }, .cpuid_eax = 7, .cpuid_needs_ecx = true, .cpuid_ecx = 0,
@@ -434,14 +390,13 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { }, [FEAT_7_0_ECX] = { .feat_names = { -NULL ,"avx512vbmi" ,"umip" ,"pku" , -"ospke" ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,"avx512-vpopcntdq" ,NULL , -"la57" ,NULL ,NULL ,NULL , -NULL ,NULL ,"rdpid" ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [1] = "avx512vbmi", + [2] = "umip", + [3] = "pku", + [4] = "ospke", + [14] = "avx512-vpopcntdq", + [16] = "la57", + [22] = "rdpid", }, .cpuid_eax = 7, .cpuid_needs_ecx = true, .cpuid_ecx = 0,
@@ -450,14 +405,8 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { }, [FEAT_7_0_EDX] = { .feat_names = { -NULL ,NULL ,"avx512-4vnniw" ,"avx512-4fmaps" , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [2] = "avx512-4vnniw", + [3] = "avx512-4fmaps", }, .cpuid_eax = 7, .cpuid_needs_ecx = true, .cpuid_ecx = 0,
@@ -466,14 +415,7 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { }, [FEAT_8000_0007_EDX] = { .feat_names = { -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -"invtsc" ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [8] = "invtsc", }, .cpuid_eax = 0x80000007, .cpuid_reg = R_EDX,
@@ -482,14 +424,10 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { }, [FEAT_XSAVE] = { .feat_names = { -"xsaveopt" ,"xsavec" ,"xgetbv1" ,"xsaves" , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [0] = "xsaveopt", + [1] = "xsavec", + [2] = "xgetbv1", + [3] = "xsaves", }, .cpuid_eax = 0xd, .cpuid_needs_ecx = true, .cpuid_ecx = 1,
@@ -498,14 +436,7 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { }, [FEAT_6_EAX] = { .feat_names = { -NULL ,NULL ,"arat" ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [2] = "arat", }, .cpuid_eax = 6, .cpuid_reg = R_EAX, .tcg_features = TCG_6_EAX_FEATURES,
Signature · 1 line
2.13.5
Quoted 4 lines · On Mon, 4 Sep 2017 15:56:22 -0300 Eduardo Habkost <[email protected]> wrote:
Using designated initializers for
feat_namesallows us to omit NULL entries, and makes mistakes easier to spot (especially when cherry-picking or merging commits).
Quoted 8 lines
Arrays that have very few entries were changed to have a designator for every element. Arrays that have almost every item present were changed to have one designator every 4 entries. Arrays that had only NULL entries had the initializers completely removed.
Signed-off-by Eduardo Habkost <[email protected]>---
I'm getting build errors with it on MacOS,
here is one for example:
qemu/target/i386/cpu.c:342:14: error: use of undeclared identifier 'KVM_FEATURE_CLOCKSOURCE'
[KVM_FEATURE_CLOCKSOURCE] = "kvmclock",
Quoted 316 lines
target/i386/cpu.c | 215 ++++++++++++++++++------------------------------------ 1 file changed, 73 insertions(+), 142 deletions(-)target/i386/cpu.c +73
-142@@ -268,28 +268,28 @@ typedef struct FeatureWordInfo {static FeatureWordInfo feature_word_info[FEATURE_WORDS ] = { [FEAT_1_EDX ] = { .feat_names = { -"fpu" ,"vme" ,"de" ,"pse" , -"tsc" ,"msr" ,"pae" ,"mce" , -"cx8" ,"apic" ,NULL ,"sep" , -"mtrr" ,"pge" ,"mca" ,"cmov" , -"pat" ,"pse36" ,"pn" /* Intel psn */ ,"clflush" /* Intel clfsh */ , -NULL ,"ds" /* Intel dts */ ,"acpi" ,"mmx" , -"fxsr" ,"sse" ,"sse2" ,"ss" , -"ht" /* Intel htt */ ,"tm" ,"ia64" ,"pbe" , + [0 ] ="fpu" ,"vme" ,"de" ,"pse" , + [4 ] ="tsc" ,"msr" ,"pae" ,"mce" , + [8 ] ="cx8" ,"apic" ,NULL ,"sep" , + [12 ] ="mtrr" ,"pge" ,"mca" ,"cmov" , + [16 ] ="pat" ,"pse36" ,"pn" ,"clflush" , + [20 ] =NULL ,"ds" /* Intel dts */ ,"acpi" ,"mmx" , + [24 ] ="fxsr" ,"sse" ,"sse2" ,"ss" , + [28 ] ="ht" ,"tm" ,"ia64" ,"pbe" , }, .cpuid_eax =1 , .cpuid_reg =R_EDX , .tcg_features =TCG_FEATURES , }, [FEAT_1_ECX ] = { .feat_names = { -"pni" /* Intel,AMD sse3 */ ,"pclmulqdq" ,"dtes64" ,"monitor" , -"ds-cpl" ,"vmx" ,"smx" ,"est" , -"tm2" ,"ssse3" ,"cid" ,NULL , -"fma" ,"cx16" ,"xtpr" ,"pdcm" , -NULL ,"pcid" ,"dca" ,"sse4.1" , -"sse4.2" ,"x2apic" ,"movbe" ,"popcnt" , -"tsc-deadline" ,"aes" ,"xsave" ,"osxsave" , -"avx" ,"f16c" ,"rdrand" ,"hypervisor" , + [0 ] ="pni" /* Intel,AMD sse3 */ ,"pclmulqdq" ,"dtes64" ,"monitor" , + [4 ] ="ds-cpl" ,"vmx" ,"smx" ,"est" , + [8 ] ="tm2" ,"ssse3" ,"cid" ,NULL , + [12 ] ="fma" ,"cx16" ,"xtpr" ,"pdcm" , + [16 ] =NULL ,"pcid" ,"dca" ,"sse4.1" , + [20 ] ="sse4.2" ,"x2apic" ,"movbe" ,"popcnt" , + [24 ] ="tsc-deadline" ,"aes" ,"xsave" ,"osxsave" , + [28 ] ="avx" ,"f16c" ,"rdrand" ,"hypervisor" , }, .cpuid_eax =1 , .cpuid_reg =R_ECX , .tcg_features =TCG_EXT_FEATURES ,@@ -301,131 +301,87 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { */ [FEAT_8000_0001_EDX] = { .feat_names = { -NULL /* fpu */ ,NULL /* vme */ ,NULL /* de */ ,NULL /* pse */ , -NULL /* tsc */ ,NULL /* msr */ ,NULL /* pae */ ,NULL /* mce */ , -NULL /* cx8 */ ,NULL /* apic */ ,NULL ,"syscall" , -NULL /* mtrr */ ,NULL /* pge */ ,NULL /* mca */ ,NULL /* cmov */ , -NULL /* pat */ ,NULL /* pse36 */ ,NULL ,NULL /* Linux mp */ , -"nx" ,NULL ,"mmxext" ,NULL /* mmx */ , -NULL /* fxsr */ ,"fxsr-opt" ,"pdpe1gb" ,"rdtscp" , - NULL, "lm", "3dnowext", "3dnow", + [11] = "syscall", + [20] = "nx", + [22] = "mmxext", + [25] = "fxsr-opt", + [26] = "pdpe1gb", + [27] = "rdtscp", + [29] = "lm", + [30] = "3dnowext", + [31] = "3dnow", }, .cpuid_eax = 0x80000001, .cpuid_reg = R_EDX, .tcg_features = TCG_EXT2_FEATURES, }, [FEAT_8000_0001_ECX] = { .feat_names = { -"lahf-lm" ,"cmp-legacy" ,"svm" ,"extapic" , -"cr8legacy" ,"abm" ,"sse4a" ,"misalignsse" , -"3dnowprefetch" ,"osvw" ,"ibs" ,"xop" , -"skinit" ,"wdt" ,NULL ,"lwp" , -"fma4" ,"tce" ,NULL ,"nodeid-msr" , -NULL ,"tbm" ,"topoext" ,"perfctr-core" , -"perfctr-nb" ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [0] = "lahf-lm", "cmp-legacy", "svm", "extapic", + [4] = "cr8legacy", "abm", "sse4a", "misalignsse", + [8] = "3dnowprefetch", "osvw", "ibs", "xop", + [12] = "skinit", "wdt", NULL, "lwp", + [16] = "fma4", "tce", NULL, "nodeid-msr", + [20] = NULL, "tbm", "topoext", "perfctr-core", + [24] = "perfctr-nb", NULL, NULL, NULL, }, .cpuid_eax = 0x80000001, .cpuid_reg = R_ECX, .tcg_features = TCG_EXT3_FEATURES, }, [FEAT_C000_0001_EDX] = { .feat_names = { -NULL ,NULL ,"xstore" ,"xstore-en" , -NULL ,NULL ,"xcrypt" ,"xcrypt-en" , -"ace2" ,"ace2-en" ,"phe" ,"phe-en" , -"pmm" ,"pmm-en" ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [0] = NULL, NULL, "xstore", "xstore-en", + [4] = NULL, NULL, "xcrypt", "xcrypt-en", + [8] = "ace2", "ace2-en", "phe", "phe-en", + [12] = "pmm", "pmm-en", NULL, NULL, }, .cpuid_eax = 0xC0000001, .cpuid_reg = R_EDX, .tcg_features = TCG_EXT4_FEATURES, }, [FEAT_KVM] = { .feat_names = { -"kvmclock" ,"kvm-nopiodelay" ,"kvm-mmu" ,"kvmclock" , -"kvm-asyncpf" ,"kvm-steal-time" ,"kvm-pv-eoi" ,"kvm-pv-unhalt" , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -"kvmclock-stable-bit" ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [KVM_FEATURE_CLOCKSOURCE] = "kvmclock", + [KVM_FEATURE_NOP_IO_DELAY] = "kvm-nopiodelay", + [KVM_FEATURE_MMU_OP] = "kvm-mmu", + [KVM_FEATURE_CLOCKSOURCE2] = "kvmclock", + [KVM_FEATURE_ASYNC_PF] = "kvm-asyncpf", + [KVM_FEATURE_STEAL_TIME] = "kvm-steal-time", + [KVM_FEATURE_PV_EOI] = "kvm-pv-eoi", + [KVM_FEATURE_PV_UNHALT] = "kvm-pv-unhalt", + [KVM_FEATURE_CLOCKSOURCE_STABLE_BIT] = "kvmclock-stable-bit", }, .cpuid_eax = KVM_CPUID_FEATURES, .cpuid_reg = R_EAX, .tcg_features = TCG_KVM_FEATURES, }, [FEAT_HYPERV_EAX] = { - .feat_names = { -NULL /* hv_msr_vp_runtime_access */ ,NULL /* hv_msr_time_refcount_access */ , -NULL /* hv_msr_synic_access */ ,NULL /* hv_msr_stimer_access */ , -NULL /* hv_msr_apic_access */ ,NULL /* hv_msr_hypercall_access */ , -NULL /* hv_vpindex_access */ ,NULL /* hv_msr_reset_access */ , -NULL /* hv_msr_stats_access */ ,NULL /* hv_reftsc_access */ , -NULL /* hv_msr_idle_access */ ,NULL /* hv_msr_frequency_access */ , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, - }, .cpuid_eax = 0x40000003, .cpuid_reg = R_EAX, }, [FEAT_HYPERV_EBX] = { - .feat_names = { -NULL /* hv_create_partitions */ ,NULL /* hv_access_partition_id */ , -NULL /* hv_access_memory_pool */ ,NULL /* hv_adjust_message_buffers */ , -NULL /* hv_post_messages */ ,NULL /* hv_signal_events */ , -NULL /* hv_create_port */ ,NULL /* hv_connect_port */ , -NULL /* hv_access_stats */ ,NULL ,NULL ,NULL /* hv_debugging */ , -NULL /* hv_cpu_power_management */ ,NULL /* hv_configure_profiler */ , -NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, - }, .cpuid_eax = 0x40000003, .cpuid_reg = R_EBX, }, [FEAT_HYPERV_EDX] = { - .feat_names = { -NULL /* hv_mwait */ ,NULL /* hv_guest_debugging */ , -NULL /* hv_perf_monitor */ ,NULL /* hv_cpu_dynamic_part */ , -NULL /* hv_hypercall_params_xmm */ ,NULL /* hv_guest_idle_state */ , -NULL ,NULL , -NULL ,NULL ,NULL /* hv_guest_crash_msr */ ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, - }, .cpuid_eax = 0x40000003, .cpuid_reg = R_EDX, }, [FEAT_SVM] = { .feat_names = { -"npt" ,"lbrv" ,"svm-lock" ,"nrip-save" , -"tsc-scale" ,"vmcb-clean" ,"flushbyasid" ,"decodeassists" , -NULL ,NULL ,"pause-filter" ,NULL , -"pfthreshold" ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [0] = "npt", "lbrv", "svm-lock", "nrip-save", + [4] = "tsc-scale", "vmcb-clean", "flushbyasid", "decodeassists", + [8] = NULL, NULL, "pause-filter", NULL, + [12] = "pfthreshold", NULL, NULL, NULL, + }, .cpuid_eax = 0x8000000A, .cpuid_reg = R_EDX, .tcg_features = TCG_SVM_FEATURES, }, [FEAT_7_0_EBX] = { .feat_names = { -"fsgsbase" ,"tsc-adjust" ,NULL ,"bmi1" , -"hle" ,"avx2" ,NULL ,"smep" , -"bmi2" ,"erms" ,"invpcid" ,"rtm" , -NULL ,NULL ,"mpx" ,NULL , -"avx512f" ,"avx512dq" ,"rdseed" ,"adx" , -"smap" ,"avx512ifma" ,"pcommit" ,"clflushopt" , -"clwb" ,NULL ,"avx512pf" ,"avx512er" , - "avx512cd", "sha-ni", "avx512bw", "avx512vl", + [0] = "fsgsbase", "tsc-adjust", NULL, "bmi1", + [4] = "hle", "avx2", NULL, "smep", + [8] = "bmi2", "erms", "invpcid", "rtm", + [12] = NULL, NULL, "mpx", NULL, + [16] = "avx512f", "avx512dq", "rdseed", "adx", + [20] = "smap", "avx512ifma", "pcommit", "clflushopt", + [24] = "clwb", NULL, "avx512pf", "avx512er", + [28] = "avx512cd", "sha-ni", "avx512bw", "avx512vl", }, .cpuid_eax = 7, .cpuid_needs_ecx = true, .cpuid_ecx = 0,@@ -434,14 +390,13 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { }, [FEAT_7_0_ECX] = { .feat_names = { -NULL ,"avx512vbmi" ,"umip" ,"pku" , -"ospke" ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,"avx512-vpopcntdq" ,NULL , -"la57" ,NULL ,NULL ,NULL , -NULL ,NULL ,"rdpid" ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [1] = "avx512vbmi", + [2] = "umip", + [3] = "pku", + [4] = "ospke", + [14] = "avx512-vpopcntdq", + [16] = "la57", + [22] = "rdpid", }, .cpuid_eax = 7, .cpuid_needs_ecx = true, .cpuid_ecx = 0,@@ -450,14 +405,8 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { }, [FEAT_7_0_EDX] = { .feat_names = { -NULL ,NULL ,"avx512-4vnniw" ,"avx512-4fmaps" , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [2] = "avx512-4vnniw", + [3] = "avx512-4fmaps", }, .cpuid_eax = 7, .cpuid_needs_ecx = true, .cpuid_ecx = 0,@@ -466,14 +415,7 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { }, [FEAT_8000_0007_EDX] = { .feat_names = { -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -"invtsc" ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [8] = "invtsc", }, .cpuid_eax = 0x80000007, .cpuid_reg = R_EDX,@@ -482,14 +424,10 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { }, [FEAT_XSAVE] = { .feat_names = { -"xsaveopt" ,"xsavec" ,"xgetbv1" ,"xsaves" , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [0] = "xsaveopt", + [1] = "xsavec", + [2] = "xgetbv1", + [3] = "xsaves", }, .cpuid_eax = 0xd, .cpuid_needs_ecx = true, .cpuid_ecx = 1,@@ -498,14 +436,7 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { }, [FEAT_6_EAX] = { .feat_names = { -NULL ,NULL ,"arat" ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , -NULL ,NULL ,NULL ,NULL , - NULL, NULL, NULL, NULL, + [2] = "arat", }, .cpuid_eax = 6, .cpuid_reg = R_EAX, .tcg_features = TCG_6_EAX_FEATURES,