* [PATCH 1/3] KVM: x86: Insert "AMD" in KVM_X86_FEATURE_PSFD @ 2022-08-26 21:00 Jim Mattson 2022-08-26 21:00 ` [PATCH 2/3] KVM: x86: Report CPUID.7.1 support on CPUs with CPUID.7 indices > 1 Jim Mattson 2022-08-26 21:00 ` [PATCH 3/3] KVM: x86: Expose Predictive Store Forwarding Disable on Intel parts Jim Mattson 0 siblings, 2 replies; 5+ messages in thread From: Jim Mattson @ 2022-08-26 21:00 UTC (permalink / raw) To: kvm, pbonzini; +Cc: Jim Mattson, Babu Moger Intel and AMD have separate CPUID bits for each SPEC_CTRL bit. In the case of every bit other than PFSD, the Intel CPUID bit has no vendor name qualifier, but the AMD CPUID bit does. For consistency, rename KVM_X86_FEATURE_PSFD to KVM_X86_FEATURE_AMD_PSFD. No functional change intended. Signed-off-by: Jim Mattson <jmattson@google.com> Cc: Babu Moger <Babu.Moger@amd.com> --- arch/x86/kvm/cpuid.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index 75dcf7a72605..07be45c5bb93 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -62,7 +62,7 @@ u32 xstate_required_size(u64 xstate_bv, bool compacted) * This one is tied to SSB in the user API, and not * visible in /proc/cpuinfo. */ -#define KVM_X86_FEATURE_PSFD (13*32+28) /* Predictive Store Forwarding Disable */ +#define KVM_X86_FEATURE_AMD_PSFD (13*32+28) /* Predictive Store Forwarding Disable */ #define F feature_bit #define SF(name) (boot_cpu_has(X86_FEATURE_##name) ? F(name) : 0) @@ -673,7 +673,7 @@ void kvm_set_cpu_caps(void) F(CLZERO) | F(XSAVEERPTR) | F(WBNOINVD) | F(AMD_IBPB) | F(AMD_IBRS) | F(AMD_SSBD) | F(VIRT_SSBD) | F(AMD_SSB_NO) | F(AMD_STIBP) | F(AMD_STIBP_ALWAYS_ON) | - __feature_bit(KVM_X86_FEATURE_PSFD) + __feature_bit(KVM_X86_FEATURE_AMD_PSFD) ); /* -- 2.37.2.672.g94769d06f0-goog ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/3] KVM: x86: Report CPUID.7.1 support on CPUs with CPUID.7 indices > 1 2022-08-26 21:00 [PATCH 1/3] KVM: x86: Insert "AMD" in KVM_X86_FEATURE_PSFD Jim Mattson @ 2022-08-26 21:00 ` Jim Mattson 2022-08-26 23:54 ` Sean Christopherson 2022-08-26 21:00 ` [PATCH 3/3] KVM: x86: Expose Predictive Store Forwarding Disable on Intel parts Jim Mattson 1 sibling, 1 reply; 5+ messages in thread From: Jim Mattson @ 2022-08-26 21:00 UTC (permalink / raw) To: kvm, pbonzini; +Cc: Jim Mattson, Sean Christopherson Previously, KVM reported support for CPUID.(EAX=7,ECX=1) only if the maximum leaf 7 index on the host was exactly 1. A recent microcode patch for Ice Lake raised the maximum leaf 7 index from 0 to 2, skipping right over 1. Though that patch left CPUID.(EAX=7,ECX=1) filled with zeros on Ice Lake, it nonetheless exposed this bug. Report CPUID.(EAX=7,ECX=1) support if the maximum leaf 7 index on the host is at least 1. Cc: Sean Christopherson <seanjc@google.com> Fixes: bcf600ca8d21 ("KVM: x86: Remove the unnecessary loop on CPUID 0x7 sub-leafs") Signed-off-by: Jim Mattson <jmattson@google.com> --- arch/x86/kvm/cpuid.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index 07be45c5bb93..64cdabb3cb2c 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -886,7 +886,7 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) cpuid_entry_override(entry, CPUID_7_EDX); /* KVM only supports 0x7.0 and 0x7.1, capped above via min(). */ - if (entry->eax == 1) { + if (entry->eax >= 1) { entry = do_host_cpuid(array, function, 1); if (!entry) goto out; -- 2.37.2.672.g94769d06f0-goog ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/3] KVM: x86: Report CPUID.7.1 support on CPUs with CPUID.7 indices > 1 2022-08-26 21:00 ` [PATCH 2/3] KVM: x86: Report CPUID.7.1 support on CPUs with CPUID.7 indices > 1 Jim Mattson @ 2022-08-26 23:54 ` Sean Christopherson 2022-08-27 16:51 ` Jim Mattson 0 siblings, 1 reply; 5+ messages in thread From: Sean Christopherson @ 2022-08-26 23:54 UTC (permalink / raw) To: Jim Mattson; +Cc: kvm, pbonzini On Fri, Aug 26, 2022, Jim Mattson wrote: > Previously, KVM reported support for CPUID.(EAX=7,ECX=1) only if the > maximum leaf 7 index on the host was exactly 1. A recent microcode > patch for Ice Lake raised the maximum leaf 7 index from 0 to 2, > skipping right over 1. Though that patch left CPUID.(EAX=7,ECX=1) > filled with zeros on Ice Lake, it nonetheless exposed this bug. > > Report CPUID.(EAX=7,ECX=1) support if the maximum leaf 7 index on the > host is at least 1. > > Cc: Sean Christopherson <seanjc@google.com> > Fixes: bcf600ca8d21 ("KVM: x86: Remove the unnecessary loop on CPUID 0x7 sub-leafs") > Signed-off-by: Jim Mattson <jmattson@google.com> > --- > arch/x86/kvm/cpuid.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c > index 07be45c5bb93..64cdabb3cb2c 100644 > --- a/arch/x86/kvm/cpuid.c > +++ b/arch/x86/kvm/cpuid.c > @@ -886,7 +886,7 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) > cpuid_entry_override(entry, CPUID_7_EDX); > > /* KVM only supports 0x7.0 and 0x7.1, capped above via min(). */ > - if (entry->eax == 1) { > + if (entry->eax >= 1) { But as the comment says, above this is: entry->eax = min(entry->eax, 1u); ... /* KVM only supports 0x7.0 and 0x7.1, capped above via min(). */ if (entry->eax == 1) { What am I missing? ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/3] KVM: x86: Report CPUID.7.1 support on CPUs with CPUID.7 indices > 1 2022-08-26 23:54 ` Sean Christopherson @ 2022-08-27 16:51 ` Jim Mattson 0 siblings, 0 replies; 5+ messages in thread From: Jim Mattson @ 2022-08-27 16:51 UTC (permalink / raw) To: Sean Christopherson; +Cc: kvm, pbonzini On Fri, Aug 26, 2022 at 4:54 PM Sean Christopherson <seanjc@google.com> wrote: > > On Fri, Aug 26, 2022, Jim Mattson wrote: > > Previously, KVM reported support for CPUID.(EAX=7,ECX=1) only if the > > maximum leaf 7 index on the host was exactly 1. A recent microcode > > patch for Ice Lake raised the maximum leaf 7 index from 0 to 2, > > skipping right over 1. Though that patch left CPUID.(EAX=7,ECX=1) > > filled with zeros on Ice Lake, it nonetheless exposed this bug. > > > > Report CPUID.(EAX=7,ECX=1) support if the maximum leaf 7 index on the > > host is at least 1. > > > > Cc: Sean Christopherson <seanjc@google.com> > > Fixes: bcf600ca8d21 ("KVM: x86: Remove the unnecessary loop on CPUID 0x7 sub-leafs") > > Signed-off-by: Jim Mattson <jmattson@google.com> > > --- > > arch/x86/kvm/cpuid.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c > > index 07be45c5bb93..64cdabb3cb2c 100644 > > --- a/arch/x86/kvm/cpuid.c > > +++ b/arch/x86/kvm/cpuid.c > > @@ -886,7 +886,7 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) > > cpuid_entry_override(entry, CPUID_7_EDX); > > > > /* KVM only supports 0x7.0 and 0x7.1, capped above via min(). */ > > - if (entry->eax == 1) { > > + if (entry->eax >= 1) { > > But as the comment says, above this is: > > entry->eax = min(entry->eax, 1u); > > ... > > /* KVM only supports 0x7.0 and 0x7.1, capped above via min(). */ > if (entry->eax == 1) { > > What am I missing? It's not you; it's me. There's no bug here. ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 3/3] KVM: x86: Expose Predictive Store Forwarding Disable on Intel parts 2022-08-26 21:00 [PATCH 1/3] KVM: x86: Insert "AMD" in KVM_X86_FEATURE_PSFD Jim Mattson 2022-08-26 21:00 ` [PATCH 2/3] KVM: x86: Report CPUID.7.1 support on CPUs with CPUID.7 indices > 1 Jim Mattson @ 2022-08-26 21:00 ` Jim Mattson 1 sibling, 0 replies; 5+ messages in thread From: Jim Mattson @ 2022-08-26 21:00 UTC (permalink / raw) To: kvm, pbonzini; +Cc: Jim Mattson Intel enumerates support for PSFD in CPUID.(EAX=7,ECX=2):EDX.PSFD[bit 0]. Report support for this feature in KVM if it is available on the host. Presumably, this feature bit, like its AMD counterpart, is not welcome in cpufeatures.h, so add a local definition of this feature in KVM. Signed-off-by: Jim Mattson <jmattson@google.com> --- arch/x86/kvm/cpuid.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index 64cdabb3cb2c..b5af9e451bef 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -62,6 +62,7 @@ u32 xstate_required_size(u64 xstate_bv, bool compacted) * This one is tied to SSB in the user API, and not * visible in /proc/cpuinfo. */ +#define KVM_X86_FEATURE_PSFD 0 /* Predictive Store Forwarding Disable */ #define KVM_X86_FEATURE_AMD_PSFD (13*32+28) /* Predictive Store Forwarding Disable */ #define F feature_bit @@ -677,9 +678,9 @@ void kvm_set_cpu_caps(void) ); /* - * AMD has separate bits for each SPEC_CTRL bit. - * arch/x86/kernel/cpu/bugs.c is kind enough to - * record that in cpufeatures so use them. + * AMD has separate bits for each SPEC_CTRL bit. Except for + * PSFD, arch/x86/kernel/cpu/bugs.c is kind enough to record + * that in cpufeatures so use them. */ if (boot_cpu_has(X86_FEATURE_IBPB)) kvm_cpu_cap_set(X86_FEATURE_AMD_IBPB); @@ -880,13 +881,13 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) break; /* function 7 has additional index. */ case 7: - entry->eax = min(entry->eax, 1u); + /* KVM only supports leaf 7 indices 0 through 2. */ + max_idx = entry->eax = min(entry->eax, 2u); cpuid_entry_override(entry, CPUID_7_0_EBX); cpuid_entry_override(entry, CPUID_7_ECX); cpuid_entry_override(entry, CPUID_7_EDX); - /* KVM only supports 0x7.0 and 0x7.1, capped above via min(). */ - if (entry->eax >= 1) { + if (max_idx >= 1) { entry = do_host_cpuid(array, function, 1); if (!entry) goto out; @@ -896,6 +897,16 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) entry->ecx = 0; entry->edx = 0; } + if (max_idx >= 2) { + entry = do_host_cpuid(array, function, 2); + if (!entry) + goto out; + + entry->eax = 0; + entry->ebx = 0; + entry->ecx = 0; + entry->edx &= BIT(KVM_X86_FEATURE_PSFD); + } break; case 9: break; -- 2.37.2.672.g94769d06f0-goog ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-08-27 16:51 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-08-26 21:00 [PATCH 1/3] KVM: x86: Insert "AMD" in KVM_X86_FEATURE_PSFD Jim Mattson 2022-08-26 21:00 ` [PATCH 2/3] KVM: x86: Report CPUID.7.1 support on CPUs with CPUID.7 indices > 1 Jim Mattson 2022-08-26 23:54 ` Sean Christopherson 2022-08-27 16:51 ` Jim Mattson 2022-08-26 21:00 ` [PATCH 3/3] KVM: x86: Expose Predictive Store Forwarding Disable on Intel parts Jim Mattson
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.