Re: [PATCH v5 6/7] KVM: x86: Combine .gmem_prepare()+.gmem_invalidate() into .gmem_convert()

From: Sean Christopherson

Date: Tue Jul 21 2026 - 18:07:26 EST


On Tue, Jul 21, 2026, Ackerley Tng wrote:
> Sean Christopherson <seanjc@xxxxxxxxxx> writes:
> I like Option B below better, which should also resolve my issue.

Roger that. The more I stare at this, the more I like Option B, too. I'll go
with that.

> > I'd be a-ok with providing
> > separate kvm_arch_gmem_make_{private,shared}() under GMEM_CONVERT.
> >
> > I guess at that point I don't have a strong preference betwee having a single
> > kvm_x86_ops hook versus also having kvm_x86_ops.gmem_make_{private,shared}().
> >
> > I.e. Option A:
> >
> > #ifdef CONFIG_HAVE_KVM_ARCH_GMEM_CONVERT
> > int kvm_arch_gmem_make_private(struct kvm *kvm, gfn_t gfn, kvm_pfn_t pfn,
> > kvm_pfn_t nr_pages, int max_order)
> > {
> > return kvm_x86_call(gmem_convert)(kvm, gfn, pfn, nr_pages, max_order, true);
> > }
> > int kvm_arch_gmem_make_shared(kvm_pfn_t pfn, kvm_pfn_t nr_pages, int max_order,
> > bool to_private)
> > {
> > return kvm_x86_call(gmem_convert)(NULL, -1ull, pfn, nr_pages, max_order, false);
> > }
> > #endif
> >
> > #ifdef CONFIG_HAVE_KVM_ARCH_GMEM_RECLAIM
> > void kvm_arch_gmem_reclaim(kvm_pfn_t pfn, kvm_pfn_t nr_pages, int max_order)
> > {
> > WARN_ON_ONCE(kvm_x86_call(gmem_convert)(NULL, -1ull, pfn, nr_pages, max_order, false));
> > }
> > #endif
> >
> >
> > Or Option B:
> >
> > #ifdef CONFIG_HAVE_KVM_ARCH_GMEM_CONVERT
> > int kvm_arch_gmem_make_private(struct kvm *kvm, gfn_t gfn, kvm_pfn_t pfn,
> > kvm_pfn_t nr_pages, int max_order)
> > {
> > return kvm_x86_call(gmem_make_private)(kvm, gfn, pfn, nr_pages, max_order);
> > }
> > int kvm_arch_gmem_make_shared(kvm_pfn_t pfn, kvm_pfn_t nr_pages, int max_order,
> > bool to_private)
> > {
> > kvm_x86_call(gmem_make_shared)(pfn, nr_pages, max_order);
> > return 0;
> > }
> > #endif
> >
> > #ifdef CONFIG_HAVE_KVM_ARCH_GMEM_RECLAIM
> > void kvm_arch_gmem_reclaim(kvm_pfn_t pfn, kvm_pfn_t nr_pages, int max_order)
> > {
> > kvm_x86_call(gmem_make_shared)(pfn, nr_pages, max_order);
> > }
> > #endif