The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Yosry Ahmed <yosry@kernel.org>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 4/7] KVM: x86: Add a per-vendor callback to setup EFER caps
Date: Wed, 8 Jul 2026 13:56:16 -0700	[thread overview]
Message-ID: <ak65cOXmxoznMCNo@google.com> (raw)
In-Reply-To: <CAO9r8zNyAfFFPxNYeht+FK-BHHxcUh1DTb6aOpffm_9ebEVUSA@mail.gmail.com>

On Wed, Jul 08, 2026, Yosry Ahmed wrote:
> On Wed, Jul 8, 2026 at 7:01 AM Sean Christopherson <seanjc@google.com> wrote:
> >
> > On Tue, Jul 07, 2026, Yosry Ahmed wrote:
> > > On Tue, Jul 7, 2026 at 2:56 PM Sean Christopherson <seanjc@google.com> wrote:
> > > >
> > > > 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.
> > >
> > > I didn't do it this way because it creates a dependency on SVM setting
> > > the X86_FEATURE_SVM cap before kvm_setup_efer_caps() is called.
> >
> > For all intents and purposes, that dependency already exists due to the
> > X86_FEATURE_{NX,FXSR_OPT,AUTOIBRS} checks.  And thanks to kvm_is_configuring_cpu_caps,
> > it's "impossible" for those caps to be toggled outside of svm_set_cpu_caps().
> 
> Right, I missed this. kvm_is_configuring_cpu_caps is neat. I wonder if
> we can make that an enum with values {UNINIT, CONFIGURING,
> INITIALIZED}, then we can be more paranoid and WARN if the the state
> isn't INITIALIZED in kvm_setup_efer_caps(). That might be too paranoid
> though.

I thought about trying to do something like that too, and mostly landed on "too
paranoid".  Or rather, landed on "mostly just shifts where the bugs will be".
E.g. kvm_setup_efer_caps() needs to run after kvm_cpu_caps are configured, or
more specificaly, before ops->hardware_setup().  But supported_{xcr0,xss} need
to be initialized before ops->hardware_setup(), so that KVM can manipulate the
support bits at the same time kvm_cpu_caps are updated.  And so adding one-off
WARNs still requires on having a priori knowledge of exactly where in the
bootstrapping process the code needs to run, i.e. we still have to "manually"
select the right stage of kvm_is_configuring_cpu_caps.

What _would_ scale a little better would be to have kvm_cpu_cap_get() WARN if
kvm_is_configuring_cpu_caps isn't INITIALIZED, but I'm hesitant to do that because
it'll pollute KVM with WARNs just to detect rare bugs that really should be caught
during initial development anyways.

  reply	other threads:[~2026-07-08 20:56 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-06 19:54 [PATCH v2 0/7] KVM: x86: EFER validity fixes and cleanups Yosry Ahmed
2026-07-06 19:54 ` [PATCH v2 1/7] KVM: x86: Check EFER validity on KVM_SET_SREGS* Yosry Ahmed
2026-07-06 19:54 ` [PATCH v2 2/7] KVM: SVM: Disallow EFER.SVME and EFER.LSMLE if nested is disabled Yosry Ahmed
2026-07-06 19:54 ` [PATCH v2 3/7] KVM: x86: Disallow EFER.LME and EFER.LMA if long mode is not supported Yosry Ahmed
2026-07-06 19:54 ` [PATCH v2 4/7] KVM: x86: Add a per-vendor callback to setup EFER caps Yosry Ahmed
2026-07-07 21:56   ` Sean Christopherson
2026-07-07 22:29     ` Yosry Ahmed
2026-07-08 14:01       ` Sean Christopherson
2026-07-08 19:12         ` Yosry Ahmed
2026-07-08 20:56           ` Sean Christopherson [this message]
2026-07-08 21:34             ` Yosry Ahmed
2026-07-06 19:54 ` [PATCH v2 5/7] KVM: x86: Reverse the polarity of efer_reserved_bits Yosry Ahmed
2026-07-10 10:23   ` Nikolay Borisov
2026-07-06 19:54 ` [PATCH v2 6/7] KVM: x86: Move supported EFER bits to kvm_caps Yosry Ahmed
2026-07-10 12:56   ` Nikolay Borisov
2026-07-06 19:54 ` [PATCH v2 7/7] KVM: selftests: Extend set_sregs test to cover EFER Yosry Ahmed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ak65cOXmxoznMCNo@google.com \
    --to=seanjc@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=yosry@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox