From: Sean Christopherson <seanjc@google.com>
To: Ackerley Tng <ackerleytng@google.com>
Cc: "Paolo Bonzini" <pbonzini@redhat.com>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
"Hyunwoo Kim" <imv4bel@gmail.com>,
"Tom Lendacky" <thomas.lendacky@amd.com>,
"Michael Roth" <michael.roth@amd.com>,
"Jörg Rödel" <joro@8bytes.org>, "Fuad Tabba" <tabba@google.com>
Subject: Re: [PATCH v2 4/9] KVM: Rework .gmem_invalidate() into .gmem_free_folio()
Date: Mon, 29 Jun 2026 15:02:31 -0700 [thread overview]
Message-ID: <akLrd4esRyuyrrGC@google.com> (raw)
In-Reply-To: <CAEvNRgFt=pPi1XpwiaZm1-EWyZKa-1qm=QWOhFwBZ2ab_-oFVQ@mail.gmail.com>
On Mon, Jun 29, 2026, Ackerley Tng wrote:
> Sean Christopherson <seanjc@google.com> writes:
>
> >
> > [...snip...]
> >
> >
> > -void sev_gmem_invalidate(kvm_pfn_t start, kvm_pfn_t end)
> > +void sev_gmem_free_folio(struct folio *folio)
> > {
> > + kvm_pfn_t start = page_to_pfn(folio_page(folio, 0));
> > + kvm_pfn_t end = start + (1ul << folio_order(folio));
> > kvm_pfn_t pfn;
> >
> > if (!cc_platform_has(CC_ATTR_HOST_SEV_SNP))
>
> I thought we intended to draw the line such that the platforms don't
> reference folios, and so this function should be parametrized by pfn.
>
> I think we should still stick with
>
> .free_folio = kvm_gmem_free_folio
>
> and kvm_gmem_free_folio() translates the folio to pfns and calls the
> arch function, named something like .gmem_LIFECYCLE_ACTION_pfn_range.
>
> Now for LIFECYCLE_ACTION, one way to think of it is that this should
> represent the point in the lifecycle of guest_memfd memory where the
> memory is removed from guest's private use, so perhaps "host_reclaim"?
kvm_arch_gmem_reclaim_memory()? I don't want to include "host", because the
"reclaim" may or may not be host initiated. I don't want to use "pfn_range"
because it's too close to "gfn_range".
> Then kvm_gmem_free_folio() becomes:
>
> kvm_gmem_free_folio() {
> pfn_start, pfn_end = translate folio to pfn range;
> kvm_x86_call(gmem_host_reclaim_pfn_range)(pfn_start, pfn_end);
> }
>
>
> And in conversions
>
> if (!to_private) {
> pfn_start, pfn_end = translate guest_memfd offset range to pfns;
> kvm_x86_call(gmem_host_reclaim_pfn_range)(pfn_start, pfn_end);
> }
>
> (and now it is right for the !to_private check to remain in guest_memfd
> since we're explicitly using that to guard a *host* reclaim function.
>
> Another way to think of LIFECYCLE_ACTION is to have the hook represent
> the point of time where the memory's attribute is being set. Perhaps
> "set_attributes"?
>
> Then kvm_gmem_free_folio() becomes:
>
> kvm_gmem_free_folio() {
> pfn_start, pfn_end = translate folio to pfn range;
> kvm_x86_call(gmem_set_attributes_pfn_range)(pfn_start, pfn_end, SHARED);
No, because this isn't about setting memory PRIVATE vs. SHARED, it's about freeing
memory back to the host. Which is why I suggested the comically verbose
CONFIG_KVM_ARCH_GMEM_FREE_ON_SHARED_CONVERSION: SEV-SNP effectively frees memory
when converting to shared.
> }
>
> because when freeing a folio we want to set the attributes to SHARED.
No, because the RMP isn't being moved to a "shared" state per se, rather the page
is being unassigned. And from KVM's perspective, freeing the folio can happen
even if the memory isn't first converted to SHARED (in KVM's memory attributes).
> And in conversions
>
> if (kvm_x86_call(gmem_should_set_attributes_pfn_range)(SHARED)) {
> pfn_start, pfn_end = translate guest_memfd offset range to pfns;
> kvm_x86_call(gmem_set_attributes_pfn_range)(pfn_start, pfn_end, SHARED);
> }
>
> This is biased towards conversions (related proposal at [1]).
>
> [1] https://lore.kernel.org/all/CAEvNRgGX3GkazCWM=6y9YLgn=YemXuG==Oo+L58cac1Fd86_TQ@mail.gmail.com/
>
> >
> > [...snip...]
> >
next prev parent reply other threads:[~2026-06-29 22:02 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-26 23:14 [PATCH v2 0/9] KVM: SEV: Fix RMP #PF due freeing in-use VMSA Sean Christopherson
2026-06-26 23:14 ` [PATCH v2 1/9] KVM: SEV: Track the GPA of the guest-controlled VMSA used for SNP guests Sean Christopherson
2026-06-26 23:14 ` [PATCH v2 2/9] KVM: SEV: Extract loading of guest-provided VMSA to a separate helper Sean Christopherson
2026-06-26 23:14 ` [PATCH v2 3/9] KVM: SEV: Mark vCPU RUNNABLE after AP_CREATE, even if VMSA is unusable Sean Christopherson
2026-06-26 23:14 ` [PATCH v2 4/9] KVM: Rework .gmem_invalidate() into .gmem_free_folio() Sean Christopherson
2026-06-29 21:50 ` Ackerley Tng
2026-06-29 22:02 ` Sean Christopherson [this message]
2026-06-30 0:09 ` Ackerley Tng
2026-06-30 0:18 ` Sean Christopherson
2026-06-26 23:14 ` [PATCH v2 5/9] KVM: x86/mmu: Fold kvm_mmu_zap_memslot() into kvm_arch_flush_shadow_memslot() Sean Christopherson
2026-06-26 23:14 ` [PATCH v2 6/9] KVM: x86/mmu: Split kvm_mmu_zap_all_fast() into "front" and "back" halves Sean Christopherson
2026-06-26 23:14 ` [PATCH v2 7/9] KVM: SEV: Forcefully invalidate SNP VMSA if its backing gmem page is zapped Sean Christopherson
2026-06-29 21:59 ` Ackerley Tng
2026-06-29 23:49 ` Sean Christopherson
2026-06-26 23:14 ` [PATCH v2 8/9] KVM: x86: Guard .gmem_prepare() declarations with HAVE_KVM_GMEM_PREPARE=y Sean Christopherson
2026-06-26 23:14 ` [PATCH v2 9/9] KVM: SEV: Mark vCPU has having guest-provided VMSA even if its invalid Sean Christopherson
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=akLrd4esRyuyrrGC@google.com \
--to=seanjc@google.com \
--cc=ackerleytng@google.com \
--cc=imv4bel@gmail.com \
--cc=joro@8bytes.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=michael.roth@amd.com \
--cc=pbonzini@redhat.com \
--cc=tabba@google.com \
--cc=thomas.lendacky@amd.com \
/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