@@ -749,6 +749,18 @@ void kvm_set_cpu_caps(void)
749749 0 /* SME */ | F (SEV ) | 0 /* VM_PAGE_FLUSH */ | F (SEV_ES ) |
750750 F (SME_COHERENT ));
751751
752+ kvm_cpu_cap_mask (CPUID_8000_0021_EAX ,
753+ BIT (0 ) /* NO_NESTED_DATA_BP */ |
754+ BIT (2 ) /* LFENCE Always serializing */ | 0 /* SmmPgCfgLock */ |
755+ BIT (5 ) /* The memory form of VERW mitigates TSA */ |
756+ BIT (6 ) /* NULL_SEL_CLR_BASE */ | 0 /* PrefetchCtlMsr */
757+ );
758+ if (cpu_feature_enabled (X86_FEATURE_LFENCE_RDTSC ))
759+ kvm_cpu_caps [CPUID_8000_0021_EAX ] |= BIT (2 ) /* LFENCE Always serializing */ ;
760+ if (!static_cpu_has_bug (X86_BUG_NULL_SEG ))
761+ kvm_cpu_caps [CPUID_8000_0021_EAX ] |= BIT (6 ) /* NULL_SEL_CLR_BASE */ ;
762+ kvm_cpu_caps [CPUID_8000_0021_EAX ] |= BIT (9 ) /* NO_SMM_CTL_MSR */ ;
763+
752764 kvm_cpu_cap_mask (CPUID_C000_0001_EDX ,
753765 F (XSTORE ) | F (XSTORE_EN ) | F (XCRYPT ) | F (XCRYPT_EN ) |
754766 F (ACE2 ) | F (ACE2_EN ) | F (PHE ) | F (PHE_EN ) |
@@ -758,12 +770,15 @@ void kvm_set_cpu_caps(void)
758770 if (cpu_feature_enabled (X86_FEATURE_SRSO_NO ))
759771 kvm_cpu_cap_set (X86_FEATURE_SRSO_NO );
760772
761- kvm_cpu_cap_mask ( CPUID_8000_0021_EAX , F ( VERW_CLEAR ) );
773+ kvm_cpu_cap_check_and_set ( X86_FEATURE_VERW_CLEAR );
762774
763775 kvm_cpu_cap_init_kvm_defined (CPUID_8000_0021_ECX ,
764776 F (TSA_SQ_NO ) | F (TSA_L1_NO )
765777 );
766778
779+ kvm_cpu_cap_check_and_set (X86_FEATURE_TSA_SQ_NO );
780+ kvm_cpu_cap_check_and_set (X86_FEATURE_TSA_L1_NO );
781+
767782 /*
768783 * Hide RDTSCP and RDPID if either feature is reported as supported but
769784 * probing MSR_TSC_AUX failed. This is purely a sanity check and
@@ -1250,21 +1265,7 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function)
12501265 break ;
12511266 case 0x80000021 :
12521267 entry -> ebx = entry -> edx = 0 ;
1253- /*
1254- * Pass down these bits:
1255- * EAX 0 NNDBP, Processor ignores nested data breakpoints
1256- * EAX 2 LAS, LFENCE always serializing
1257- * EAX 6 NSCB, Null selector clear base
1258- *
1259- * Other defined bits are for MSRs that KVM does not expose:
1260- * EAX 3 SPCL, SMM page configuration lock
1261- * EAX 13 PCMSR, Prefetch control MSR
1262- */
1263- entry -> eax &= BIT (0 ) | BIT (2 ) | BIT (6 );
1264- if (static_cpu_has (X86_FEATURE_LFENCE_RDTSC ))
1265- entry -> eax |= BIT (2 );
1266- if (!static_cpu_has_bug (X86_BUG_NULL_SEG ))
1267- entry -> eax |= BIT (6 );
1268+ cpuid_entry_override (entry , CPUID_8000_0021_EAX );
12681269 cpuid_entry_override (entry , CPUID_8000_0021_ECX );
12691270 break ;
12701271 /*Add support for Centaur's CPUID instruction*/
0 commit comments