Message ID | 20221019084734.3590760-3-jiaxi.chen@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | x86: KVM: Expose CPUID to guest for new Intel platform instructions | expand |
On 10/19/22 01:47, Jiaxi Chen wrote: > diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h > index 445626cb5779..9313240e3cdd 100644 > --- a/arch/x86/include/asm/cpufeatures.h > +++ b/arch/x86/include/asm/cpufeatures.h > @@ -309,6 +309,7 @@ > #define X86_FEATURE_AVX_VNNI (12*32+ 4) /* AVX VNNI instructions */ > #define X86_FEATURE_AVX512_BF16 (12*32+ 5) /* AVX512 BFLOAT16 instructions */ > #define X86_FEATURE_CMPCCXADD (12*32+ 7) /* CMPccXADD instructions */ > +#define X86_FEATURE_AMX_FP16 (12*32+21) /* AMX fp16 Support */ Please zap these from /proc/cpuinfo by doing this: #define X86_FEATURE_AMX_FP16 (12*32+21) /* "" AMX fp16 Support */ > /* AMD-defined CPU features, CPUID level 0x80000008 (EBX), word 13 */ > #define X86_FEATURE_CLZERO (13*32+ 0) /* CLZERO instruction */ > diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c > index 3f745f6fdc43..d983ddb974ba 100644 > --- a/arch/x86/kvm/cpuid.c > +++ b/arch/x86/kvm/cpuid.c > @@ -657,7 +657,7 @@ void kvm_set_cpu_caps(void) > kvm_cpu_cap_set(X86_FEATURE_SPEC_CTRL_SSBD); > > kvm_cpu_cap_mask(CPUID_7_1_EAX, > - F(AVX_VNNI) | F(AVX512_BF16) | F(CMPCCXADD) > + F(AVX_VNNI) | F(AVX512_BF16) | F(CMPCCXADD) | F(AMX_FP16) > ); > > kvm_cpu_cap_mask(CPUID_D_1_EAX, KVM folks, is the idea that every feature that is enumerated to a guest needs to be in one of these masks? Or is there something special about the features in these masks?
On 11/2/22 19:14, Dave Hansen wrote: >> >> kvm_cpu_cap_mask(CPUID_7_1_EAX, >> - F(AVX_VNNI) | F(AVX512_BF16) | F(CMPCCXADD) >> + F(AVX_VNNI) | F(AVX512_BF16) | F(CMPCCXADD) | F(AMX_FP16) >> ); >> >> kvm_cpu_cap_mask(CPUID_D_1_EAX, > > KVM folks, is the idea that every feature that is enumerated to a guest > needs to be in one of these masks? Or is there something special about > the features in these masks? Yes, all features are vetted manually to see whether they require new MSRs and the like. Therefore, anything that userspace can set in the guest's CPUID must be in the list. Paolo
On 11/2/22 11:16, Paolo Bonzini wrote: > On 11/2/22 19:14, Dave Hansen wrote: >>> kvm_cpu_cap_mask(CPUID_7_1_EAX, >>> - F(AVX_VNNI) | F(AVX512_BF16) | F(CMPCCXADD) >>> + F(AVX_VNNI) | F(AVX512_BF16) | F(CMPCCXADD) | F(AMX_FP16) >>> ); >>> kvm_cpu_cap_mask(CPUID_D_1_EAX, >> >> KVM folks, is the idea that every feature that is enumerated to a guest >> needs to be in one of these masks? Or is there something special about >> the features in these masks? > > Yes, all features are vetted manually to see whether they require new > MSRs and the like. Therefore, anything that userspace can set in the > guest's CPUID must be in the list. Makes sense. Intel folks, when you add these bits, can you please include information about the "vetting" that you performed? For example, it would be handy to say: AMX_FP16 is just a new instruction that operates on existing AMX tile registers. It needs no additional enabling on top of the existing kernel AMX enabling.
On 11/3/2022 2:21 AM, Dave Hansen wrote: > On 11/2/22 11:16, Paolo Bonzini wrote: >> On 11/2/22 19:14, Dave Hansen wrote: >>>> kvm_cpu_cap_mask(CPUID_7_1_EAX, >>>> - F(AVX_VNNI) | F(AVX512_BF16) | F(CMPCCXADD) >>>> + F(AVX_VNNI) | F(AVX512_BF16) | F(CMPCCXADD) | F(AMX_FP16) >>>> ); >>>> kvm_cpu_cap_mask(CPUID_D_1_EAX, >>> >>> KVM folks, is the idea that every feature that is enumerated to a guest >>> needs to be in one of these masks? Or is there something special about >>> the features in these masks? >> >> Yes, all features are vetted manually to see whether they require new >> MSRs and the like. Therefore, anything that userspace can set in the >> guest's CPUID must be in the list. > > Makes sense. > > Intel folks, when you add these bits, can you please include information > about the "vetting" that you performed? > > For example, it would be handy to say: > > AMX_FP16 is just a new instruction that operates on existing AMX > tile registers. It needs no additional enabling on top of the > existing kernel AMX enabling. Thanks for Dave's suggestion. It makes the commit message much clear and readable. Will modify it in v2.
diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h index 445626cb5779..9313240e3cdd 100644 --- a/arch/x86/include/asm/cpufeatures.h +++ b/arch/x86/include/asm/cpufeatures.h @@ -309,6 +309,7 @@ #define X86_FEATURE_AVX_VNNI (12*32+ 4) /* AVX VNNI instructions */ #define X86_FEATURE_AVX512_BF16 (12*32+ 5) /* AVX512 BFLOAT16 instructions */ #define X86_FEATURE_CMPCCXADD (12*32+ 7) /* CMPccXADD instructions */ +#define X86_FEATURE_AMX_FP16 (12*32+21) /* AMX fp16 Support */ /* AMD-defined CPU features, CPUID level 0x80000008 (EBX), word 13 */ #define X86_FEATURE_CLZERO (13*32+ 0) /* CLZERO instruction */ diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index 3f745f6fdc43..d983ddb974ba 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -657,7 +657,7 @@ void kvm_set_cpu_caps(void) kvm_cpu_cap_set(X86_FEATURE_SPEC_CTRL_SSBD); kvm_cpu_cap_mask(CPUID_7_1_EAX, - F(AVX_VNNI) | F(AVX512_BF16) | F(CMPCCXADD) + F(AVX_VNNI) | F(AVX512_BF16) | F(CMPCCXADD) | F(AMX_FP16) ); kvm_cpu_cap_mask(CPUID_D_1_EAX,