Re: [PATCH v2 2/3] KVM: x86: Virtualize AMD CPUID faulting

From: Sean Christopherson

Date: Tue May 12 2026 - 20:05:02 EST


On Tue, May 12, 2026, Jim Mattson wrote:
> On Tue, May 12, 2026 at 2:33 PM Sean Christopherson <seanjc@xxxxxxxxxx> wrote:
> > From: Sean Christopherson <seanjc@xxxxxxxxxx>
> > Date: Tue, 12 May 2026 14:20:47 -0700
> > Subject: [PATCH 1/3] KVM: x86: Consolidate CPUID fault handling for emulator
> > and interception logic
> >
> > Extract the logic for emulating CPUID faulting (where CPUID #GPs at CPL>0
> > outside of SMM) into a dedicated helper and use the helper for both the
> > full emulator and the intercepted-CPUID paths.
> >
> > Opportunistically drop kvm_require_cpl(), as kvm_require_cpl() was the one
> > and only user.
> >
> > No functional change intended.
> >
> > Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx>
> > ---
> > arch/x86/include/asm/kvm_host.h | 1 -
> > arch/x86/kvm/cpuid.c | 5 +++--
> > arch/x86/kvm/cpuid.h | 8 ++++++++
> > arch/x86/kvm/emulate.c | 6 +-----
> > arch/x86/kvm/kvm_emulate.h | 1 +
> > arch/x86/kvm/x86.c | 18 ++++++------------
> > 6 files changed, 19 insertions(+), 20 deletions(-)
> >
> > diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
> > index c470e40a00aa..a9005c61619b 100644
> > --- a/arch/x86/include/asm/kvm_host.h
> > +++ b/arch/x86/include/asm/kvm_host.h
> > @@ -2285,7 +2285,6 @@ void kvm_requeue_exception(struct kvm_vcpu *vcpu, unsigned int nr,
> > void kvm_inject_page_fault(struct kvm_vcpu *vcpu, struct x86_exception *fault);
> > void kvm_inject_emulated_page_fault(struct kvm_vcpu *vcpu,
> > struct x86_exception *fault);
> > -bool kvm_require_cpl(struct kvm_vcpu *vcpu, int required_cpl);
> > bool kvm_require_dr(struct kvm_vcpu *vcpu, int dr);
> >
> > static inline int __kvm_irq_line_state(unsigned long *irq_state,
> > diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
> > index e69156b54cff..1c95d1fa3ead 100644
> > --- a/arch/x86/kvm/cpuid.c
> > +++ b/arch/x86/kvm/cpuid.c
> > @@ -2161,9 +2161,10 @@ int kvm_emulate_cpuid(struct kvm_vcpu *vcpu)
> > {
> > u32 eax, ebx, ecx, edx;
> >
> > - if (!is_smm(vcpu) && cpuid_fault_enabled(vcpu) &&
> > - !kvm_require_cpl(vcpu, 0))
> > + if (!kvm_is_cpuid_allowed(vcpu)) {
> > + kvm_queue_exception_e(vcpu, GP_VECTOR, 0);
> > return 1;
> > + }
>
> That's so much better!
>
> Will you drop this in when applying, or should I send a V3?

Go ahead and send a v3. It slots in easy enough, but I'm trying not to get into
the habit of applying pseudo-posted patches.