From: Sean Christopherson <seanjc@google.com>
To: Kai Huang <kai.huang@intel.com>
Cc: "dwmw2@infradead.org" <dwmw2@infradead.org>,
Rick P Edgecombe <rick.p.edgecombe@intel.com>,
"dave.hansen@linux.intel.com" <dave.hansen@linux.intel.com>,
"binbin.wu@linux.intel.com" <binbin.wu@linux.intel.com>,
"vkuznets@redhat.com" <vkuznets@redhat.com>,
"x86@kernel.org" <x86@kernel.org>,
"kas@kernel.org" <kas@kernel.org>, "paul@xen.org" <paul@xen.org>,
"yosry@kernel.org" <yosry@kernel.org>,
"pbonzini@redhat.com" <pbonzini@redhat.com>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"linux-coco@lists.linux.dev" <linux-coco@lists.linux.dev>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 15/15] KVM: x86: Move the bulk of register specific code from x86.c to regs.c
Date: Wed, 20 May 2026 11:11:18 -0700 [thread overview]
Message-ID: <ag35RgwowvR9Q4hA@google.com> (raw)
In-Reply-To: <4a918cb38dccd4ef7a2d84d16f5044472d069f7c.camel@intel.com>
On Wed, May 20, 2026, Kai Huang wrote:
> On Tue, 2026-05-19 at 18:25 -0700, Sean Christopherson wrote:
> > On Wed, May 20, 2026, Kai Huang wrote:
> > > I am not sure whether there's a mandatory requirement that "struct kvm_arch" and
> > > "struct kvm_vcpu_arch" must be fully embedded, and it would be kinda painful to
> > > covert to a pointer (e.g., there's kvm_x86_ops::vm_size), but perhaps that is
> > > also an option to consider?
> >
> > The idea I had in the past, and where I was going with things before s390's love
> > for arm64 came along, was to add a kvm_arch.h in arch/<arch>/kvm, and have virt/kvm
> > include _that_ instead of kvm_host.h.
> >
>
> Not sure whether there's other code doing so? :-)
>
> > That way we don't need to make any fundamental
> > changes to structures, but we can still significantly cut down on what's exposed
> > via kvm_host.h.
> >
>
> Yeah.
>
> I saw below from you in [1]:
>
> --
> We've explore several alternatives to the #ifdef __KVM__ approach, and
> they all sucked, hard. What I really wanted (and still want) to do, is to
> bury the bulk of kvm_host.h (and other KVM headers) in virt/kvm, but every
> attempt to do that ended in flames. Even with the __KVM__ guards in place,
> each architecture's kvm_host.h is too intertwined with the common kvm_host.h,
> and trying to extract small-ish pieces just doesn't work (each patch
> inevitably snowballed into a gigantic beast).
>
> The other idea we considered (which I thought of, and feel dirty for even
> proposing it internally), is to move all headers under virt/kvm, add
> virt/kvm/include to the global header path, and then have KVM x86 omit
> virt/kvm/include when configured to hide KVM internals. I hate this idea
> because it sets a bad precedent, and requires a lot of file movement
> without providing any benefit to other architectures. E.g. I hope that
> guarding KVM internals with #ifdef __KVM__ will allow us to slowly clean
> things up so that some day KVM only exposes a handful of APIs to the rest
> of the kernel (probably a pipe dream).
> --
>
> I haven't looked into details of your #ifdef __KVM__ approach yet, but seems you
> don't quite like moving KVM internal staff to virt/kvm/include/ ?
Not for arch code, which is the trickiest bit to handle.
> But if we want to hide KVM internal structures, I don't see any other options
> except virt/kvm/include/ is the place to go?
arch/$(ARCH)/kvm/kvm_arch.h is the obvious approach. Code in virt/kvm can reach
arch/$(ARCH)/kvm, we just need to add it to the include path. That's why I was
working on unifying the include definitions.
> Btw, have you considered reverting the inclusion of "strut kvm" and "struct
> kvm_arch" (and the vcpu structure), i.e., to make "struct kvm_arch" include
> "struct kvm"? I don't have any clue of whether it is feasible or how much
> effort it needs, though -- it's just something came to mind when replying.
>
> [1]: https://lore.kernel.org/all/20230916003118.2540661-1-seanjc@google.com/
>
> > At some point I'll try to take another look; it's really the
> > s390+arm64 combo that's problematic :-/
>
> If you want, I can take a look. I think I'll have bandwidth in near feature.
>
> Given you have tried multiple times so I am not sure what I can achieve, though.
Consolidating includes and creating arch/$(ARCH)/kvm/kvm_arch.h should be more
doable, what has failed spectacularly over and over is effectively trying to hide
most of asm/kvm_host.h, which sounds *really* stupid when I phrase it that way :-)
> Anyway, seems "allow loading a new (or old) KVM module without needing to
> rebuild and reboot the entire kernel" is a good reason to do this.
Note, we've scrapped upstreaming multi-KVM, and I don't see it ever getting accepted
upstream, as live update is far superior, e.g. isn't limited to just KVM, doesn't
have the same orchestration or testing problems, etc.
And FWIW, today, you _can_ reload a new (or old) KVM module without rebuilding
the kernel or rebooting the host, it's just that you can't modify certain structures.
next prev parent reply other threads:[~2026-05-20 18:11 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-14 21:53 [PATCH v2 00/15] KVM: x86: Clean up kvm_<reg>_{read,write}() mess Sean Christopherson
2026-05-14 21:53 ` [PATCH v2 01/15] KVM: SVM: Truncate INVLPGA address in compatibility mode Sean Christopherson
2026-05-15 6:36 ` Binbin Wu
2026-05-14 21:53 ` [PATCH v2 02/15] KVM: x86/xen: Bug the VM if 32-bit KVM observes a 64-bit mode hypercall Sean Christopherson
2026-05-15 6:46 ` Binbin Wu
2026-05-14 21:53 ` [PATCH v2 03/15] KVM: x86/xen: Don't truncate RAX when handling hypercall from protected guest Sean Christopherson
2026-05-15 7:21 ` Binbin Wu
2026-05-15 12:55 ` Sean Christopherson
2026-05-18 2:19 ` Binbin Wu
2026-05-18 7:15 ` David Woodhouse
2026-05-18 9:43 ` Binbin Wu
2026-05-18 9:50 ` David Woodhouse
2026-05-18 9:55 ` Binbin Wu
2026-05-20 5:02 ` Binbin Wu
2026-05-20 8:27 ` David Woodhouse
2026-05-20 8:32 ` David Woodhouse
2026-05-14 21:53 ` [PATCH v2 04/15] KVM: VMX: Read 32-bit GPR values for ENCLS instructions outside of 64-bit mode Sean Christopherson
2026-05-15 7:26 ` Binbin Wu
2026-05-14 21:53 ` [PATCH v2 05/15] KVM: x86: Trace hypercall register *after* truncating values for 32-bit Sean Christopherson
2026-05-15 7:32 ` Binbin Wu
2026-05-14 21:53 ` [PATCH v2 06/15] KVM: x86: Rename kvm_cache_regs.h => regs.h Sean Christopherson
2026-05-14 22:28 ` Yosry Ahmed
2026-05-15 7:45 ` Binbin Wu
2026-05-14 21:53 ` [PATCH v2 07/15] KVM: x86: Move inlined CR and DR helpers from x86.h to regs.h Sean Christopherson
2026-05-14 22:30 ` Yosry Ahmed
2026-05-15 8:07 ` Binbin Wu
2026-05-14 21:53 ` [PATCH v2 08/15] KVM: x86: Add mode-aware versions of kvm_<reg>_{read,write}() helpers Sean Christopherson
2026-05-15 8:46 ` Binbin Wu
2026-05-18 11:31 ` Huang, Kai
2026-05-18 20:51 ` Sean Christopherson
2026-05-18 22:29 ` Huang, Kai
2026-05-18 23:44 ` Huang, Kai
2026-05-14 21:53 ` [PATCH v2 09/15] KVM: x86: Drop non-raw kvm_<reg>_write() helpers Sean Christopherson
2026-05-15 9:11 ` Binbin Wu
2026-05-14 21:53 ` [PATCH v2 10/15] KVM: nSVM: Use kvm_rax_read() now that it's mode-aware Sean Christopherson
2026-05-14 21:53 ` [PATCH v2 11/15] Revert "KVM: VMX: Read 32-bit GPR values for ENCLS instructions outside of 64-bit mode" Sean Christopherson
2026-05-15 9:26 ` Binbin Wu
2026-05-14 21:53 ` [PATCH v2 12/15] KVM: x86: Harden is_64_bit_hypercall() against bugs on 32-bit kernels Sean Christopherson
2026-05-15 9:31 ` Binbin Wu
2026-05-14 21:53 ` [PATCH v2 13/15] KVM: x86: Move update_cr8_intercept() to lapic.c Sean Christopherson
2026-05-14 21:53 ` [PATCH v2 14/15] KVM: x86: Move kvm_pv_async_pf_enabled() to x86.h (as an inline) Sean Christopherson
2026-05-14 21:53 ` [PATCH v2 15/15] KVM: x86: Move the bulk of register specific code from x86.c to regs.c Sean Christopherson
2026-05-19 12:16 ` Huang, Kai
2026-05-19 15:04 ` Sean Christopherson
2026-05-20 0:59 ` Huang, Kai
2026-05-20 1:25 ` Sean Christopherson
2026-05-20 2:29 ` Huang, Kai
2026-05-20 18:11 ` Sean Christopherson [this message]
2026-05-20 22:22 ` Huang, Kai
2026-05-14 22:31 ` [PATCH v2 00/15] KVM: x86: Clean up kvm_<reg>_{read,write}() mess 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=ag35RgwowvR9Q4hA@google.com \
--to=seanjc@google.com \
--cc=binbin.wu@linux.intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=dwmw2@infradead.org \
--cc=kai.huang@intel.com \
--cc=kas@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=linux-coco@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=paul@xen.org \
--cc=pbonzini@redhat.com \
--cc=rick.p.edgecombe@intel.com \
--cc=vkuznets@redhat.com \
--cc=x86@kernel.org \
--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