* [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest @ 2016-10-28 9:12 He Chen 2016-10-28 9:31 ` Paolo Bonzini 2016-10-28 10:13 ` Luc, Piotr 0 siblings, 2 replies; 24+ messages in thread From: He Chen @ 2016-10-28 9:12 UTC (permalink / raw) To: kvm Cc: linux-kernel, x86, Paolo Bonzini, Radim Krčmář, Thomas Gleixner, Ingo Molnar, H . Peter Anvin, Luwei Kang, Piotr Luc The spec can be found in Intel Software Developer Manual or in Instruction Set Extensions Programming Reference. Signed-off-by: Luwei Kang <luwei.kang@intel.com> Signed-off-by: He Chen <he.chen@linux.intel.com> --- arch/x86/kvm/cpuid.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index afa7bbb..328b169 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -376,6 +376,10 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, /* cpuid 7.0.ecx*/ const u32 kvm_cpuid_7_0_ecx_x86_features = F(PKU) | 0 /*OSPKE*/; + /* cpuid 7.0.edx*/ + const u32 kvm_cpuid_7_0_edx_x86_features = + 0x4 /* AVX512-4VNNIW */ | 0x8 /* AVX512-4FMAPS */; + /* all calls to cpuid_count() should be made on the same cpu */ get_cpu(); @@ -458,12 +462,13 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, /* PKU is not yet implemented for shadow paging. */ if (!tdp_enabled) entry->ecx &= ~F(PKU); + entry->edx &= kvm_cpuid_7_0_edx_x86_features; } else { entry->ebx = 0; entry->ecx = 0; + entry->edx = 0; } entry->eax = 0; - entry->edx = 0; break; } case 9: -- 2.7.4 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-28 9:12 [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest He Chen @ 2016-10-28 9:31 ` Paolo Bonzini 2016-10-28 9:46 ` He Chen 2016-10-28 10:13 ` Luc, Piotr 1 sibling, 1 reply; 24+ messages in thread From: Paolo Bonzini @ 2016-10-28 9:31 UTC (permalink / raw) To: He Chen, kvm Cc: linux-kernel, x86, Radim Krčmář, Thomas Gleixner, Ingo Molnar, H . Peter Anvin, Luwei Kang, Piotr Luc On 28/10/2016 11:12, He Chen wrote: > The spec can be found in Intel Software Developer Manual or in > Instruction Set Extensions Programming Reference. > > Signed-off-by: Luwei Kang <luwei.kang@intel.com> > Signed-off-by: He Chen <he.chen@linux.intel.com> > --- > arch/x86/kvm/cpuid.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c > index afa7bbb..328b169 100644 > --- a/arch/x86/kvm/cpuid.c > +++ b/arch/x86/kvm/cpuid.c > @@ -376,6 +376,10 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, > /* cpuid 7.0.ecx*/ > const u32 kvm_cpuid_7_0_ecx_x86_features = F(PKU) | 0 /*OSPKE*/; > > + /* cpuid 7.0.edx*/ > + const u32 kvm_cpuid_7_0_edx_x86_features = > + 0x4 /* AVX512-4VNNIW */ | 0x8 /* AVX512-4FMAPS */; Please define the new features in cpufeature.h first. Thanks, Paolo > /* all calls to cpuid_count() should be made on the same cpu */ > get_cpu(); > > @@ -458,12 +462,13 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, > /* PKU is not yet implemented for shadow paging. */ > if (!tdp_enabled) > entry->ecx &= ~F(PKU); > + entry->edx &= kvm_cpuid_7_0_edx_x86_features; > } else { > entry->ebx = 0; > entry->ecx = 0; > + entry->edx = 0; > } > entry->eax = 0; > - entry->edx = 0; > break; > } > case 9: > ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-28 9:31 ` Paolo Bonzini @ 2016-10-28 9:46 ` He Chen 2016-10-28 9:54 ` Paolo Bonzini 0 siblings, 1 reply; 24+ messages in thread From: He Chen @ 2016-10-28 9:46 UTC (permalink / raw) To: Paolo Bonzini Cc: kvm, linux-kernel, x86, Radim Krčmář, Thomas Gleixner, Ingo Molnar, H . Peter Anvin, Luwei Kang, Piotr Luc On Fri, Oct 28, 2016 at 11:31:05AM +0200, Paolo Bonzini wrote: > > > On 28/10/2016 11:12, He Chen wrote: > > The spec can be found in Intel Software Developer Manual or in > > Instruction Set Extensions Programming Reference. > > > > Signed-off-by: Luwei Kang <luwei.kang@intel.com> > > Signed-off-by: He Chen <he.chen@linux.intel.com> > > --- > > arch/x86/kvm/cpuid.c | 7 ++++++- > > 1 file changed, 6 insertions(+), 1 deletion(-) > > > > diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c > > index afa7bbb..328b169 100644 > > --- a/arch/x86/kvm/cpuid.c > > +++ b/arch/x86/kvm/cpuid.c > > @@ -376,6 +376,10 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, > > /* cpuid 7.0.ecx*/ > > const u32 kvm_cpuid_7_0_ecx_x86_features = F(PKU) | 0 /*OSPKE*/; > > > > + /* cpuid 7.0.edx*/ > > + const u32 kvm_cpuid_7_0_edx_x86_features = > > + 0x4 /* AVX512-4VNNIW */ | 0x8 /* AVX512-4FMAPS */; > > Please define the new features in cpufeature.h first. > These 2 new features defined as scattered features in kernel. In cpufeature.h, there are: #define X86_FEATURE_AVX512_4VNNIW (7*32+16) #define X86_FEATURE_AVX512_4FMAPS (7*32+17) Please see disscusion here: https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1250183.html Thanks, -He ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-28 9:46 ` He Chen @ 2016-10-28 9:54 ` Paolo Bonzini 2016-10-28 9:55 ` He Chen 0 siblings, 1 reply; 24+ messages in thread From: Paolo Bonzini @ 2016-10-28 9:54 UTC (permalink / raw) To: He Chen Cc: kvm, linux-kernel, x86, Radim Krčmář, Thomas Gleixner, Ingo Molnar, H . Peter Anvin, Luwei Kang, Piotr Luc On 28/10/2016 11:46, He Chen wrote: > On Fri, Oct 28, 2016 at 11:31:05AM +0200, Paolo Bonzini wrote: >> >> >> On 28/10/2016 11:12, He Chen wrote: >>> The spec can be found in Intel Software Developer Manual or in >>> Instruction Set Extensions Programming Reference. >>> >>> Signed-off-by: Luwei Kang <luwei.kang@intel.com> >>> Signed-off-by: He Chen <he.chen@linux.intel.com> >>> --- >>> arch/x86/kvm/cpuid.c | 7 ++++++- >>> 1 file changed, 6 insertions(+), 1 deletion(-) >>> >>> diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c >>> index afa7bbb..328b169 100644 >>> --- a/arch/x86/kvm/cpuid.c >>> +++ b/arch/x86/kvm/cpuid.c >>> @@ -376,6 +376,10 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, >>> /* cpuid 7.0.ecx*/ >>> const u32 kvm_cpuid_7_0_ecx_x86_features = F(PKU) | 0 /*OSPKE*/; >>> >>> + /* cpuid 7.0.edx*/ >>> + const u32 kvm_cpuid_7_0_edx_x86_features = >>> + 0x4 /* AVX512-4VNNIW */ | 0x8 /* AVX512-4FMAPS */; >> >> Please define the new features in cpufeature.h first. >> > These 2 new features defined as scattered features in kernel. > In cpufeature.h, there are: > #define X86_FEATURE_AVX512_4VNNIW (7*32+16) > #define X86_FEATURE_AVX512_4FMAPS (7*32+17) > > Please see disscusion here: > https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1250183.html Uff, that sucks. :( I'd agree with hpa's position in that thread. Please do something like /* These are scattered features in cpufeature.h. */ #define KVM_CPUID_BIT_AVX512_4VNNIW 2 #define KVM_CPUID_BIT_AVX512_4FMAPS 3 #define KF(x) bit(KVM_CPUID_BIT_##x) and then const u32 kvm_cpuid_7_0_edx_x86_features = KF(AVX512_4VNNIW) | KF(AVX512_4FMAPS) I'll think of a trick to avoid using F for scattered features... Thanks, Paolo ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-28 9:54 ` Paolo Bonzini @ 2016-10-28 9:55 ` He Chen 0 siblings, 0 replies; 24+ messages in thread From: He Chen @ 2016-10-28 9:55 UTC (permalink / raw) To: Paolo Bonzini Cc: kvm, linux-kernel, x86, Radim Krčmář, Thomas Gleixner, Ingo Molnar, H . Peter Anvin, Luwei Kang, Piotr Luc On Fri, Oct 28, 2016 at 11:54:13AM +0200, Paolo Bonzini wrote: > > > On 28/10/2016 11:46, He Chen wrote: > > On Fri, Oct 28, 2016 at 11:31:05AM +0200, Paolo Bonzini wrote: > >> > >> > >> On 28/10/2016 11:12, He Chen wrote: > >>> The spec can be found in Intel Software Developer Manual or in > >>> Instruction Set Extensions Programming Reference. > >>> > >>> Signed-off-by: Luwei Kang <luwei.kang@intel.com> > >>> Signed-off-by: He Chen <he.chen@linux.intel.com> > >>> --- > >>> arch/x86/kvm/cpuid.c | 7 ++++++- > >>> 1 file changed, 6 insertions(+), 1 deletion(-) > >>> > >>> diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c > >>> index afa7bbb..328b169 100644 > >>> --- a/arch/x86/kvm/cpuid.c > >>> +++ b/arch/x86/kvm/cpuid.c > >>> @@ -376,6 +376,10 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, > >>> /* cpuid 7.0.ecx*/ > >>> const u32 kvm_cpuid_7_0_ecx_x86_features = F(PKU) | 0 /*OSPKE*/; > >>> > >>> + /* cpuid 7.0.edx*/ > >>> + const u32 kvm_cpuid_7_0_edx_x86_features = > >>> + 0x4 /* AVX512-4VNNIW */ | 0x8 /* AVX512-4FMAPS */; > >> > >> Please define the new features in cpufeature.h first. > >> > > These 2 new features defined as scattered features in kernel. > > In cpufeature.h, there are: > > #define X86_FEATURE_AVX512_4VNNIW (7*32+16) > > #define X86_FEATURE_AVX512_4FMAPS (7*32+17) > > > > Please see disscusion here: > > https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1250183.html > > Uff, that sucks. :( I'd agree with hpa's position in that thread. > > Please do something like > > /* These are scattered features in cpufeature.h. */ > #define KVM_CPUID_BIT_AVX512_4VNNIW 2 > #define KVM_CPUID_BIT_AVX512_4FMAPS 3 > #define KF(x) bit(KVM_CPUID_BIT_##x) > > and then > > const u32 kvm_cpuid_7_0_edx_x86_features = > KF(AVX512_4VNNIW) | KF(AVX512_4FMAPS) > > I'll think of a trick to avoid using F for scattered features... > Appreciate it :-) ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-28 9:12 [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest He Chen 2016-10-28 9:31 ` Paolo Bonzini @ 2016-10-28 10:13 ` Luc, Piotr 2016-10-28 10:17 ` Paolo Bonzini 1 sibling, 1 reply; 24+ messages in thread From: Luc, Piotr @ 2016-10-28 10:13 UTC (permalink / raw) To: kvm, he.chen Cc: linux-kernel, tglx, x86, hpa, mingo, pbonzini, Kang, Luwei, rkrcmar On Fri, 2016-10-28 at 17:12 +0800, He Chen wrote: > The spec can be found in Intel Software Developer Manual or in > Instruction Set Extensions Programming Reference. > > Signed-off-by: Luwei Kang <luwei.kang@intel.com> > Signed-off-by: He Chen <he.chen@linux.intel.com> > --- > arch/x86/kvm/cpuid.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c > index afa7bbb..328b169 100644 > --- a/arch/x86/kvm/cpuid.c > +++ b/arch/x86/kvm/cpuid.c > @@ -376,6 +376,10 @@ static inline int __do_cpuid_ent(struct > kvm_cpuid_entry2 *entry, u32 function, > /* cpuid 7.0.ecx*/ > const u32 kvm_cpuid_7_0_ecx_x86_features = F(PKU) | 0 > /*OSPKE*/; > > + /* cpuid 7.0.edx*/ > + const u32 kvm_cpuid_7_0_edx_x86_features = > + 0x4 /* AVX512-4VNNIW */ | 0x8 /* AVX512-4FMAPS */; > + > /* all calls to cpuid_count() should be made on the same cpu > */ > get_cpu(); > > @@ -458,12 +462,13 @@ static inline int __do_cpuid_ent(struct > kvm_cpuid_entry2 *entry, u32 function, > /* PKU is not yet implemented for shadow > paging. */ > if (!tdp_enabled) > entry->ecx &= ~F(PKU); > + entry->edx &= kvm_cpuid_7_0_edx_x86_features; The cpu_mask() is missed here. I understand that it doesn't work for this scattered features but the bits in edx must be zeroed if corresponding flags were cleared in fpu__xstate_clear_all_cpu_caps. So this implies more work unfortunately. > } else { > entry->ebx = 0; > entry->ecx = 0; > + entry->edx = 0; > } > entry->eax = 0; > - entry->edx = 0; > break; > } > case 9: ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-28 10:13 ` Luc, Piotr @ 2016-10-28 10:17 ` Paolo Bonzini 2016-10-28 11:08 ` Borislav Petkov 0 siblings, 1 reply; 24+ messages in thread From: Paolo Bonzini @ 2016-10-28 10:17 UTC (permalink / raw) To: Luc, Piotr, kvm, he.chen Cc: linux-kernel, tglx, x86, hpa, mingo, Kang, Luwei, rkrcmar, Borislav Petkov On 28/10/2016 12:13, Luc, Piotr wrote: > On Fri, 2016-10-28 at 17:12 +0800, He Chen wrote: >> The spec can be found in Intel Software Developer Manual or in >> Instruction Set Extensions Programming Reference. >> >> Signed-off-by: Luwei Kang <luwei.kang@intel.com> >> Signed-off-by: He Chen <he.chen@linux.intel.com> >> --- >> arch/x86/kvm/cpuid.c | 7 ++++++- >> 1 file changed, 6 insertions(+), 1 deletion(-) >> >> diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c >> index afa7bbb..328b169 100644 >> --- a/arch/x86/kvm/cpuid.c >> +++ b/arch/x86/kvm/cpuid.c >> @@ -376,6 +376,10 @@ static inline int __do_cpuid_ent(struct >> kvm_cpuid_entry2 *entry, u32 function, >> /* cpuid 7.0.ecx*/ >> const u32 kvm_cpuid_7_0_ecx_x86_features = F(PKU) | 0 >> /*OSPKE*/; >> >> + /* cpuid 7.0.edx*/ >> + const u32 kvm_cpuid_7_0_edx_x86_features = >> + 0x4 /* AVX512-4VNNIW */ | 0x8 /* AVX512-4FMAPS */; >> + >> /* all calls to cpuid_count() should be made on the same cpu >> */ >> get_cpu(); >> >> @@ -458,12 +462,13 @@ static inline int __do_cpuid_ent(struct >> kvm_cpuid_entry2 *entry, u32 function, >> /* PKU is not yet implemented for shadow >> paging. */ >> if (!tdp_enabled) >> entry->ecx &= ~F(PKU); >> + entry->edx &= kvm_cpuid_7_0_edx_x86_features; > > The cpu_mask() is missed here. > I understand that it doesn't work for this scattered features but the > bits in edx must be zeroed if corresponding flags were cleared in > fpu__xstate_clear_all_cpu_caps. > So this implies more work unfortunately. So if the x86 folks would retract their objection and accept a new cpufeature array element it would be nice, because KVM could just do cpuid_mask(&entry->edx, CPUID_7_0_EDX); Otherwise, if you add a cpuid_count_edx function to processor.h then one can do: entry_>edx &= cpuid_count_edx(7, 0); which is decent too. Thanks, Paolo >> } else { >> entry->ebx = 0; >> entry->ecx = 0; >> + entry->edx = 0; >> } >> entry->eax = 0; >> - entry->edx = 0; >> break; >> } >> case 9: ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-28 10:17 ` Paolo Bonzini @ 2016-10-28 11:08 ` Borislav Petkov 2016-10-28 12:07 ` Paolo Bonzini 0 siblings, 1 reply; 24+ messages in thread From: Borislav Petkov @ 2016-10-28 11:08 UTC (permalink / raw) To: Paolo Bonzini Cc: Luc, Piotr, kvm, he.chen, linux-kernel, tglx, x86, hpa, mingo, Kang, Luwei, rkrcmar On Fri, Oct 28, 2016 at 12:17:02PM +0200, Paolo Bonzini wrote: > Otherwise, if you add a cpuid_count_edx function to processor.h then one > can do: > > entry_>edx &= cpuid_count_edx(7, 0); > > which is decent too. If you think of iterating over the cpuid_bits[] array and recreating the CPUID leaf for KVM, sure, why not... -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-28 11:08 ` Borislav Petkov @ 2016-10-28 12:07 ` Paolo Bonzini 2016-10-28 12:21 ` Borislav Petkov 0 siblings, 1 reply; 24+ messages in thread From: Paolo Bonzini @ 2016-10-28 12:07 UTC (permalink / raw) To: Borislav Petkov Cc: Luc, Piotr, kvm, he.chen, linux-kernel, tglx, x86, hpa, mingo, Kang, Luwei, rkrcmar On 28/10/2016 13:08, Borislav Petkov wrote: > On Fri, Oct 28, 2016 at 12:17:02PM +0200, Paolo Bonzini wrote: >> Otherwise, if you add a cpuid_count_edx function to processor.h then one >> can do: >> >> entry_>edx &= cpuid_count_edx(7, 0); >> >> which is decent too. > > If you think of iterating over the cpuid_bits[] array and recreating the > CPUID leaf for KVM, sure, why not... > cpuid_count_edx would be just static inline unsigned int cpuid_count_edx(unsigned op, unsigned count) { unsigned int eax, ebx, ecx, edx; cpuid_count(op, count, &eax, &ebx, &ecx, &edx); return edx; } Paolo ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-28 12:07 ` Paolo Bonzini @ 2016-10-28 12:21 ` Borislav Petkov 2016-10-29 12:21 ` Paolo Bonzini 0 siblings, 1 reply; 24+ messages in thread From: Borislav Petkov @ 2016-10-28 12:21 UTC (permalink / raw) To: Paolo Bonzini Cc: Luc, Piotr, kvm, he.chen, linux-kernel, tglx, x86, hpa, mingo, Kang, Luwei, rkrcmar On Fri, Oct 28, 2016 at 02:07:21PM +0200, Paolo Bonzini wrote: > cpuid_count_edx would be just > > static inline unsigned int cpuid_count_edx(unsigned op, unsigned count) > { > unsigned int eax, ebx, ecx, edx; > > cpuid_count(op, count, &eax, &ebx, &ecx, &edx); > > return edx; > } Even better. But shouldn't this be hiding unimplemented CPUID bits from the guest? -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-28 12:21 ` Borislav Petkov @ 2016-10-29 12:21 ` Paolo Bonzini 2016-10-29 12:25 ` Borislav Petkov 2016-10-31 9:15 ` Luc, Piotr 0 siblings, 2 replies; 24+ messages in thread From: Paolo Bonzini @ 2016-10-29 12:21 UTC (permalink / raw) To: Borislav Petkov Cc: Piotr Luc, kvm, he chen, linux-kernel, tglx, x86, hpa, mingo, Luwei Kang, rkrcmar ----- Original Message ----- > From: "Borislav Petkov" <bp@alien8.de> > To: "Paolo Bonzini" <pbonzini@redhat.com> > Cc: "Piotr Luc" <Piotr.Luc@intel.com>, kvm@vger.kernel.org, "he chen" <he.chen@linux.intel.com>, > linux-kernel@vger.kernel.org, tglx@linutronix.de, x86@kernel.org, hpa@zytor.com, mingo@redhat.com, "Luwei Kang" > <luwei.kang@intel.com>, rkrcmar@redhat.com > Sent: Friday, October 28, 2016 2:21:23 PM > Subject: Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest > > On Fri, Oct 28, 2016 at 02:07:21PM +0200, Paolo Bonzini wrote: > > cpuid_count_edx would be just > > > > static inline unsigned int cpuid_count_edx(unsigned op, unsigned count) > > { > > unsigned int eax, ebx, ecx, edx; > > > > cpuid_count(op, count, &eax, &ebx, &ecx, &edx); > > > > return edx; > > } > > Even better. > > But shouldn't this be hiding unimplemented CPUID bits from the guest? Currently none of the bits in CPUID[7,0].edx is ever masked by the host, so this would be enough. If we ever need to do some masking, I guess I'll practice my puss-in-boots look and submit a patch to add CPUID[7,0] back as a separate cpufeature entr. Paolo ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-29 12:21 ` Paolo Bonzini @ 2016-10-29 12:25 ` Borislav Petkov 2016-10-29 12:36 ` Paolo Bonzini 2016-10-31 9:15 ` Luc, Piotr 1 sibling, 1 reply; 24+ messages in thread From: Borislav Petkov @ 2016-10-29 12:25 UTC (permalink / raw) To: Paolo Bonzini Cc: Piotr Luc, kvm, he chen, linux-kernel, tglx, x86, hpa, mingo, Luwei Kang, rkrcmar On Sat, Oct 29, 2016 at 08:21:17AM -0400, Paolo Bonzini wrote: > Currently none of the bits in CPUID[7,0].edx is ever masked by the host, so > this would be enough. If we ever need to do some masking, I guess I'll > practice my puss-in-boots look and submit a patch to add CPUID[7,0] back > as a separate cpufeature entr. I don't understand - why can't it be filtered here if needed? I.e., return edx & KVM_CPUID_EDX_7_MASK; or so? Btw, we already have a cpuid_edx() helper in arch/x86/include/asm/processor.h -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-29 12:25 ` Borislav Petkov @ 2016-10-29 12:36 ` Paolo Bonzini 2016-10-29 12:53 ` Borislav Petkov 0 siblings, 1 reply; 24+ messages in thread From: Paolo Bonzini @ 2016-10-29 12:36 UTC (permalink / raw) To: Borislav Petkov Cc: Piotr Luc, kvm, he chen, linux-kernel, tglx, x86, hpa, mingo, Luwei Kang, rkrcmar ----- Original Message ----- > From: "Borislav Petkov" <bp@alien8.de> > To: "Paolo Bonzini" <pbonzini@redhat.com> > Cc: "Piotr Luc" <Piotr.Luc@intel.com>, kvm@vger.kernel.org, "he chen" <he.chen@linux.intel.com>, > linux-kernel@vger.kernel.org, tglx@linutronix.de, x86@kernel.org, hpa@zytor.com, mingo@redhat.com, "Luwei Kang" > <luwei.kang@intel.com>, rkrcmar@redhat.com > Sent: Saturday, October 29, 2016 2:25:48 PM > Subject: Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest > > On Sat, Oct 29, 2016 at 08:21:17AM -0400, Paolo Bonzini wrote: > > Currently none of the bits in CPUID[7,0].edx is ever masked by the host, so > > this would be enough. If we ever need to do some masking, I guess I'll > > practice my puss-in-boots look and submit a patch to add CPUID[7,0] back > > as a separate cpufeature entr. > > I don't understand - why can't it be filtered here if needed? I.e., > > return edx & KVM_CPUID_EDX_7_MASK; > > or so? Because then it wouldn't be in processor.h. > Btw, we already have a cpuid_edx() helper in arch/x86/include/asm/processor.h Yes, but it doesn't take an ecx. Anyhow this is not an issue for now. It will depend on which other bits are added to CPUID[7,0].edx, but in general it's relatively rare to blacklist bits from cpufeature. Paolo ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-29 12:36 ` Paolo Bonzini @ 2016-10-29 12:53 ` Borislav Petkov 2016-10-29 13:20 ` Paolo Bonzini 0 siblings, 1 reply; 24+ messages in thread From: Borislav Petkov @ 2016-10-29 12:53 UTC (permalink / raw) To: Paolo Bonzini Cc: Piotr Luc, kvm, he chen, linux-kernel, tglx, x86, hpa, mingo, Luwei Kang, rkrcmar On Sat, Oct 29, 2016 at 08:36:11AM -0400, Paolo Bonzini wrote: > Because then it wouldn't be in processor.h. Easy: return cpuid_edx(…) & KVM_CPUID_EDX_7_MASK; at the call site. > Yes, but it doesn't take an ecx. Looks like we need another set of macros :-) > Anyhow this is not an issue for now. It will depend on which other bits > are added to CPUID[7,0].edx, but in general it's relatively rare to blacklist > bits from cpufeature. Right. Thanks. -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-29 12:53 ` Borislav Petkov @ 2016-10-29 13:20 ` Paolo Bonzini 0 siblings, 0 replies; 24+ messages in thread From: Paolo Bonzini @ 2016-10-29 13:20 UTC (permalink / raw) To: Borislav Petkov Cc: Piotr Luc, kvm, he chen, linux-kernel, tglx, x86, hpa, mingo, Luwei Kang, rkrcmar ----- Original Message ----- > From: "Borislav Petkov" <bp@alien8.de> > To: "Paolo Bonzini" <pbonzini@redhat.com> > Cc: "Piotr Luc" <Piotr.Luc@intel.com>, kvm@vger.kernel.org, "he chen" <he.chen@linux.intel.com>, > linux-kernel@vger.kernel.org, tglx@linutronix.de, x86@kernel.org, hpa@zytor.com, mingo@redhat.com, "Luwei Kang" > <luwei.kang@intel.com>, rkrcmar@redhat.com > Sent: Saturday, October 29, 2016 2:53:10 PM > Subject: Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest > > On Sat, Oct 29, 2016 at 08:36:11AM -0400, Paolo Bonzini wrote: > > Because then it wouldn't be in processor.h. > > Easy: > > return cpuid_edx(…) & KVM_CPUID_EDX_7_MASK; > > at the call site. Yup. That's what I said before (entry->edx &= cpuid_count_edx(7, 0)). Paolo ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-29 12:21 ` Paolo Bonzini 2016-10-29 12:25 ` Borislav Petkov @ 2016-10-31 9:15 ` Luc, Piotr 2016-10-31 9:53 ` Borislav Petkov 1 sibling, 1 reply; 24+ messages in thread From: Luc, Piotr @ 2016-10-31 9:15 UTC (permalink / raw) To: pbonzini, bp Cc: kvm, linux-kernel, he.chen, tglx, x86, hpa, mingo, Kang, Luwei, rkrcmar On Sat, 2016-10-29 at 08:21 -0400, Paolo Bonzini wrote: > > Currently none of the bits in CPUID[7,0].edx is ever masked by the > host, so > this would be enough. If we ever need to do some masking, I guess > I'll > practice my puss-in-boots look and submit a patch to add CPUID[7,0] > back > as a separate cpufeature entr. I think that in v4.9-rc2 the CPUID[7,0].edx bits can be masked out by applying noxsave to cmdline. Using directly cpu_count will result in passing the bits in edx to a guest directly while the xsaveopt and rest of AVX512 features bits will be cleared. Thx Piotr ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-31 9:15 ` Luc, Piotr @ 2016-10-31 9:53 ` Borislav Petkov 2016-10-31 10:18 ` Luc, Piotr 0 siblings, 1 reply; 24+ messages in thread From: Borislav Petkov @ 2016-10-31 9:53 UTC (permalink / raw) To: Luc, Piotr Cc: pbonzini, kvm, linux-kernel, he.chen, tglx, x86, hpa, mingo, Kang, Luwei, rkrcmar On Mon, Oct 31, 2016 at 09:15:43AM +0000, Luc, Piotr wrote: > I think that in v4.9-rc2 the CPUID[7,0].edx bits can be masked out by > applying noxsave to cmdline. Using directly cpu_count will result in > passing the bits in edx to a guest directly while the xsaveopt and rest > of AVX512 features bits will be cleared. Errr, I can't parse that reading it backwards and forwards. Please elaborate. -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-31 9:53 ` Borislav Petkov @ 2016-10-31 10:18 ` Luc, Piotr 2016-10-31 10:30 ` Borislav Petkov 0 siblings, 1 reply; 24+ messages in thread From: Luc, Piotr @ 2016-10-31 10:18 UTC (permalink / raw) To: bp Cc: kvm, linux-kernel, he.chen, tglx, x86, hpa, mingo, pbonzini, Kang, Luwei, rkrcmar On Mon, 2016-10-31 at 10:53 +0100, Borislav Petkov wrote: > > I think that in v4.9-rc2 the CPUID[7,0].edx bits can be masked out > by > > applying noxsave to cmdline. Using directly cpu_count will result > in > > passing the bits in edx to a guest directly while the xsaveopt and > rest > > of AVX512 features bits will be cleared. > > Errr, I can't parse that reading it backwards and forwards. Please > elaborate. The patch that introduces AVX512_4VNNIW and AVX512_4FMAPS features was merged to kernel 4.9-rc2 so we have possibility to mask the feature bits using 'noxsave' option in kernel cmdline. This option clears all AVX512 feature bits in boot_cpu_data.x86_capability. The cpuid_mask function, which usually used in kvm, read bit from this x86_capabity and mask out. This prevents passing disabled features to guest. If we use cpu_count instead, which reports bits directly from CPU, then the bits of features that are disabled in host are passed to guest as enabled. This seems be inconsistent. Thanks, Piotr ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-31 10:18 ` Luc, Piotr @ 2016-10-31 10:30 ` Borislav Petkov 2016-10-31 10:47 ` Paolo Bonzini 0 siblings, 1 reply; 24+ messages in thread From: Borislav Petkov @ 2016-10-31 10:30 UTC (permalink / raw) To: Luc, Piotr Cc: kvm, linux-kernel, he.chen, tglx, x86, hpa, mingo, pbonzini, Kang, Luwei, rkrcmar On Mon, Oct 31, 2016 at 10:18:41AM +0000, Luc, Piotr wrote: > The cpuid_mask function, which usually used in kvm, read bit from this > x86_capabity and mask out. This prevents passing disabled features to > guest. If we use cpu_count instead, which reports bits directly from Ah, you mean cpuid_count(). > CPU, then the bits of features that are disabled in host are passed to > guest as enabled. This seems be inconsistent. Ok, I see what you mean. So I guess we'll have to iterate over the cpuid_bits[] array and recreate the CPUID leaf for KVM instead, as I suggested earlier. -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-31 10:30 ` Borislav Petkov @ 2016-10-31 10:47 ` Paolo Bonzini 2016-10-31 11:05 ` Borislav Petkov 0 siblings, 1 reply; 24+ messages in thread From: Paolo Bonzini @ 2016-10-31 10:47 UTC (permalink / raw) To: Borislav Petkov, Luc, Piotr Cc: kvm, linux-kernel, he.chen, tglx, x86, hpa, mingo, Kang, Luwei, rkrcmar On 31/10/2016 11:30, Borislav Petkov wrote: > On Mon, Oct 31, 2016 at 10:18:41AM +0000, Luc, Piotr wrote: >> The cpuid_mask function, which usually used in kvm, read bit from this >> x86_capabity and mask out. This prevents passing disabled features to >> guest. If we use cpu_count instead, which reports bits directly from > > Ah, you mean cpuid_count(). > >> CPU, then the bits of features that are disabled in host are passed to >> guest as enabled. This seems be inconsistent. > > Ok, I see what you mean. > > So I guess we'll have to iterate over the cpuid_bits[] array and > recreate the CPUID leaf for KVM instead, as I suggested earlier. Yes, indeed. :( The information is all in arch/x86/kernel/cpu/scattered.c's cpuid_bits array. Borislav, would it be okay to export the cpuid_regs enum? Paolo ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-31 10:47 ` Paolo Bonzini @ 2016-10-31 11:05 ` Borislav Petkov 2016-10-31 11:41 ` Paolo Bonzini 0 siblings, 1 reply; 24+ messages in thread From: Borislav Petkov @ 2016-10-31 11:05 UTC (permalink / raw) To: Paolo Bonzini Cc: Luc, Piotr, kvm, linux-kernel, he.chen, tglx, x86, hpa, mingo, Kang, Luwei, rkrcmar On Mon, Oct 31, 2016 at 11:47:48AM +0100, Paolo Bonzini wrote: > The information is all in arch/x86/kernel/cpu/scattered.c's cpuid_bits > array. Borislav, would it be okay to export the cpuid_regs enum? Yeah, and kill the duplicated one in arch/x86/events/intel/pt.c too please, while at it. I'd still put it all in arch/x86/kernel/cpu/scattered.c so that it is close-by and call it from outside. Thanks. -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-31 11:05 ` Borislav Petkov @ 2016-10-31 11:41 ` Paolo Bonzini 2016-11-01 7:48 ` He Chen 0 siblings, 1 reply; 24+ messages in thread From: Paolo Bonzini @ 2016-10-31 11:41 UTC (permalink / raw) To: Borislav Petkov Cc: Luc, Piotr, kvm, linux-kernel, he.chen, tglx, x86, hpa, mingo, Kang, Luwei, rkrcmar On 31/10/2016 12:05, Borislav Petkov wrote: > On Mon, Oct 31, 2016 at 11:47:48AM +0100, Paolo Bonzini wrote: >> The information is all in arch/x86/kernel/cpu/scattered.c's cpuid_bits >> array. Borislav, would it be okay to export the cpuid_regs enum? > > Yeah, and kill the duplicated one in arch/x86/events/intel/pt.c too > please, while at it. > > I'd still put it all in arch/x86/kernel/cpu/scattered.c so that it is > close-by and call it from outside. Good. Chen, are you going to do this? Paolo ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-10-31 11:41 ` Paolo Bonzini @ 2016-11-01 7:48 ` He Chen 2016-11-01 8:46 ` Borislav Petkov 0 siblings, 1 reply; 24+ messages in thread From: He Chen @ 2016-11-01 7:48 UTC (permalink / raw) To: Paolo Bonzini Cc: Borislav Petkov, Luc, Piotr, kvm, linux-kernel, tglx, x86, hpa, mingo, Kang, Luwei, rkrcmar On Mon, Oct 31, 2016 at 12:41:32PM +0100, Paolo Bonzini wrote: > > > On 31/10/2016 12:05, Borislav Petkov wrote: > > On Mon, Oct 31, 2016 at 11:47:48AM +0100, Paolo Bonzini wrote: > >> The information is all in arch/x86/kernel/cpu/scattered.c's cpuid_bits > >> array. Borislav, would it be okay to export the cpuid_regs enum? > > > > Yeah, and kill the duplicated one in arch/x86/events/intel/pt.c too > > please, while at it. > > > > I'd still put it all in arch/x86/kernel/cpu/scattered.c so that it is > > close-by and call it from outside. > > Good. Chen, are you going to do this? > Sure. Before sending a patch, let me check if my understanding is right... I will add a helper in scattered.c like: unsigned int get_scattered_cpuid_features(unsigned int level, unsigned int sub_leaf, enum cpuid_regs reg) { u32 val = 0; const struct cpuid_bit *cb; for (cb = cpuid_bits; cb->feature; cb++) { if (reg == cb->reg && level == cb->level && sub_leaf == cb->sub_leaf && boot_cpu_has(cb->feature)) val |= cb->bit; } return val; } And, when KVM wants to mask out features, it can be called outside like: entry->edx &= kvm_cpuid_7_0_edx_x86_features; entry->edx &= get_scatterd_cpuid_features(7, 0, CR_EDX); Thanks, -He ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest 2016-11-01 7:48 ` He Chen @ 2016-11-01 8:46 ` Borislav Petkov 0 siblings, 0 replies; 24+ messages in thread From: Borislav Petkov @ 2016-11-01 8:46 UTC (permalink / raw) To: He Chen Cc: Paolo Bonzini, Luc, Piotr, kvm, linux-kernel, tglx, x86, hpa, mingo, Kang, Luwei, rkrcmar On Tue, Nov 01, 2016 at 03:48:50PM +0800, He Chen wrote: > Before sending a patch, let me check if my understanding is right... > I will add a helper in scattered.c like: > > unsigned int get_scattered_cpuid_features(unsigned int level, > unsigned int sub_leaf, enum cpuid_regs reg) > { > u32 val = 0; > const struct cpuid_bit *cb; > > for (cb = cpuid_bits; cb->feature; cb++) { Right, we can improve that by keeping cpuid_bit.level sorted so that you can break out early if the level is exceeded. For that please sort it and add a comment stating that the leaf should be kept sorted ontop of it. And then you do something like this: u32 get_scattered_cpuid_leaf(unsigned int level, unsigned int sub_leaf, enum cpuid_regs reg) { u32 cpuid_val = 0; for (cb = cpuid_bits; cb->feature; cb++) { if (level < cb->level) continue; if (level > cb->level) break; if (cb->reg == reg && sub_leaf == cb->sub_leaf) { if (cpu_has(cb->feature)) cpuid_val |= BIT(cb->bit); } } return cpuid_val; } Completely untested, of course. -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply. ^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2016-11-01 8:46 UTC | newest] Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-10-28 9:12 [PATCH] x86/cpuid: expose AVX512_4VNNIW and AVX512_4FMAPS features to kvm guest He Chen 2016-10-28 9:31 ` Paolo Bonzini 2016-10-28 9:46 ` He Chen 2016-10-28 9:54 ` Paolo Bonzini 2016-10-28 9:55 ` He Chen 2016-10-28 10:13 ` Luc, Piotr 2016-10-28 10:17 ` Paolo Bonzini 2016-10-28 11:08 ` Borislav Petkov 2016-10-28 12:07 ` Paolo Bonzini 2016-10-28 12:21 ` Borislav Petkov 2016-10-29 12:21 ` Paolo Bonzini 2016-10-29 12:25 ` Borislav Petkov 2016-10-29 12:36 ` Paolo Bonzini 2016-10-29 12:53 ` Borislav Petkov 2016-10-29 13:20 ` Paolo Bonzini 2016-10-31 9:15 ` Luc, Piotr 2016-10-31 9:53 ` Borislav Petkov 2016-10-31 10:18 ` Luc, Piotr 2016-10-31 10:30 ` Borislav Petkov 2016-10-31 10:47 ` Paolo Bonzini 2016-10-31 11:05 ` Borislav Petkov 2016-10-31 11:41 ` Paolo Bonzini 2016-11-01 7:48 ` He Chen 2016-11-01 8:46 ` Borislav Petkov
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.