Re: [PATCH v2 4/7] KVM: x86: Add a per-vendor callback to setup EFER caps

From: Sean Christopherson

Date: Tue Jul 07 2026 - 18:00:48 EST


On Mon, Jul 06, 2026, Yosry Ahmed wrote:
> Move handling EFER.SVME and EFER.LMSLE from hardware setup to a new
> optional per-vendor callback invoked from kvm_setup_efer_caps(). This
> centralizes allowed EFER bits handling to kvm_setup_efer_caps(),
> facilitating following changes to move efer_reserved_bits into kvm_caps.
>
> Move the call to kvm_setup_efer_caps() after per-vendor ops are
> initialized.

Why?

> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index a0b2c40d93c21..a297a77469b38 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -6903,6 +6903,8 @@ static void kvm_setup_efer_caps(void)
>
> if (kvm_cpu_cap_has(X86_FEATURE_AUTOIBRS))
> kvm_enable_efer_bits(EFER_AUTOIBRS);
> +
> + kvm_x86_call(setup_efer_caps)();

I would rather move the togging to kvm_setup_efer_caps(), e.g.

static void kvm_setup_efer_caps(void)
{
/* Enable syscall by default because its emulated by KVM */
kvm_caps.supported_efer_bits = (u64)EFER_SCE;

if (kvm_cpu_cap_has(X86_FEATURE_LM))
kvm_caps.supported_efer_bits |= (EFER_LME | EFER_LMA);

if (kvm_cpu_cap_has(X86_FEATURE_NX))
kvm_caps.supported_efer_bits |= EFER_NX;

if (kvm_cpu_cap_has(X86_FEATURE_FXSR_OPT))
kvm_caps.supported_efer_bits |= EFER_FFXSR;

if (kvm_cpu_cap_has(X86_FEATURE_AUTOIBRS))
kvm_caps.supported_efer_bits |= EFER_AUTOIBRS;

if (kvm_cpu_cap_has(X86_FEATURE_SVM)) {
kvm_caps.supported_efer_bits |= EFER_SVME;
if (!boot_cpu_has(X86_FEATURE_EFER_LMSLE_MBZ))
kvm_caps.supported_efer_bits |= EFER_LMSLE;
}
}