Re: [PATCH 03/22] KVM: x86: Support IBPB_BRTYPE and SBPB

From: Sean Christopherson
Date: Mon Aug 21 2023 - 12:50:02 EST


On Sun, Aug 20, 2023, Josh Poimboeuf wrote:
> The IBPB_BRTYPE and SBPB CPUID bits aren't set by HW.
>
> From the AMD SRSO whitepaper:
>
> "Hypervisor software should synthesize the value of both the
> IBPB_BRTYPE and SBPB CPUID bits on these platforms for use by guest
> software."
>
> These bits are already set during kernel boot. Manually propagate them
> to the guest.

Setting the bits in kvm_cpu_caps just advertises them to userspace, i.e. it doesn't
propagate them to the guest, that's up to userspace.

> Also, propagate PRED_CMD_SBPB writes.
>
> Signed-off-by: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>
> ---
> arch/x86/kvm/cpuid.c | 4 ++++
> arch/x86/kvm/x86.c | 9 +++++----
> 2 files changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
> index d3432687c9e6..cdf703eec42d 100644
> --- a/arch/x86/kvm/cpuid.c
> +++ b/arch/x86/kvm/cpuid.c
> @@ -729,6 +729,10 @@ void kvm_set_cpu_caps(void)
> F(NULL_SEL_CLR_BASE) | F(AUTOIBRS) | 0 /* PrefetchCtlMsr */
> );
>
> + if (cpu_feature_enabled(X86_FEATURE_SBPB))
> + kvm_cpu_cap_set(X86_FEATURE_SBPB);

This can simply be:

kvm_cpu_cap_check_and_set(X86_FEATURE_SBPB);

If there's a strong desire to use cpu_feature_enabled() instead of boot_cpu_has(),
then I would rather make than change in kvm_cpu_cap_check_and_set() for all features.

> + if (cpu_feature_enabled(X86_FEATURE_IBPB_BRTYPE))
> + kvm_cpu_cap_set(X86_FEATURE_IBPB_BRTYPE);

Assuming IBPB_BRTYPE doesn't require any extra support, it's probably best to add
that one in a separate patch, as SBPB support is likely going to be a bit more
involved.

> if (cpu_feature_enabled(X86_FEATURE_SRSO_NO))
> kvm_cpu_cap_set(X86_FEATURE_SRSO_NO);

Ah, this snuck in without going through the normal review channels. This too
can use kvm_cpu_cap_check_and_set().