Re: [PATCH v4 06/30] KVM: x86: Move kvm_caps and kvm_host_values to asm/kvm_host.h
From: Binbin Wu
Date: Mon Jun 15 2026 - 02:50:12 EST
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 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".
>
>> - <thing>.{c,h} holds relevant declarations and definitions.
>> - x86.{c,h} is the kitchen sink for everything else.
>