Re: [PATCH v5 6/7] KVM: x86: Combine .gmem_prepare()+.gmem_invalidate() into .gmem_convert()
From: Ackerley Tng
Date: Tue Jul 14 2026 - 20:07:37 EST
Sean Christopherson <seanjc@xxxxxxxxxx> writes:
> +int sev_gmem_convert(struct kvm *kvm, gfn_t gfn, kvm_pfn_t pfn,
> + kvm_pfn_t nr_pages, int order, bool to_private)
> +{
> + if (to_private) {
> + if (WARN_ON_ONCE(!kvm || gfn >> (kvm_host.maxphyaddr - PAGE_SHIFT)))
Omg, maxphyaddr is actually the number of bits in an address and not an
address!
Thanks for explaining on v4.
> + return -EIO;
> +
> + return sev_gmem_make_private(kvm, gfn, pfn, nr_pages, order);
> + }
> +
> + sev_gmem_make_shared(pfn, nr_pages);
> + return 0;
> +}
> +
>
> [...snip...]
>
> #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_invalidate)(pfn, pfn + nr_pages);
> + WARN_ON_ONCE(kvm_x86_call(gmem_convert)(NULL, -1ull, pfn, nr_pages, max_order, false));
This setup means later pKVM would have to define a .gmem_convert but
actually only use it for reclaim, which seems kind of an odd
definition. (We can fix this later.)
Reviewed-by: Ackerley Tng <ackerleytng@xxxxxxxxxx>
> }
> #endif
>
> --
> 2.55.0.141.g00534a21ce-goog