Re: [PATCH v4 06/30] KVM: x86: Move kvm_caps and kvm_host_values to asm/kvm_host.h
From: Sean Christopherson
Date: Mon Jun 15 2026 - 12:27:58 EST
On Mon, Jun 15, 2026, Binbin Wu wrote:
> On 6/13/2026 5:01 PM, Xiaoyao Li wrote:
> > On 6/13/2026 8:03 AM, Sean Christopherson wrote:
> >> Relocate the kvm_caps and kvm_host_values struct definitions and their
> >> associated global variable declarations to asm/kvm_host.h to allow for a
> >> variety of cleanups in x86.h and mmu.h, and to establish a (hopefully)
> >> maintainable rule that asm/kvm_host.h's role is to define common
> >> structures (and declare any associated globals), and anything needed by
> >> arch-neutral KVM.
> >>
> >> While it would be lovely to trim kvm_host.h down to the point where it
> >> *only* holds things needed by arch-neutral and/or non-KVM code, multiple
> >> attempts to do just that have failed miserably. Trying to "hide" code
> >> from arch-neutral KVM is too restrictive (and ultimately pointless), and
> >> KVM x86 itself also needs a place to define common structures and their
> >> globals, e.g. to avoid inconsistent header include chains and/or misplaced
> >> helpers.
> >>
> >> E.g. as pointed out by Kai, it's weird that x86.h, which is a kitchen sink
> >> of sorts, includes regs.h, but not mmu.h. Literally the only reason that
> >> x86.h doesn't include mmu.h is that mmu.h references kvm_host, which is
> >> currently defined in x86.h. As a result of odd include ordering, the
> >> very clearly MMU-specific helper mmu_is_nested() lives in x86.h, not mmu.h
> >>
> >> "Fix" the kvm_host dependency so that x86.h can be the "central" include
> >> everyone expects it to be, and set KVM x86 on the path to having somewhat
> >> sensible "rules" for what goes where:
> >>
> >> - asm/kvm_host.h holds "common" structure definitions and associated key
> >> global variables, and things that are referenced by arch-neutral KVM.
> >
> > I'm confused by the term "arch-neutral" all over the changelog. I suppose
"arch-neutral" refers to virt/kvm code and other code that isn't arch specific.
I used arch-neutral here, e.g. instead of "common code", to differentiate between
arch-neutral (virt/kvm) code and common x86 (arch/x86/kvm) code.
> > include/linux/kvm_host.h is arch-neutral while asm/kvm_host.h is
> > arch-specific but not KVM internal only.
>
> IIUC, it's the situation where asm/kvm_host.h for x86 provides the
> x86-specific pieces that the generic/arch-neutral KVM depends on.
> E.g. struct kvm_arch is defined in asm/kvm_host.h, which is x86-specific, but
> the generic KVM embeds it in struct kvm as 'struct kvm_arch arch' in
> include/linux/kvm_host.h, i.e. "referenced by arch-neutral KVM".
Yep, exactly.