[PATCH RFC v2 39/50] KVM: guest_memfd: Support arch reclaim on inode destruction in PFN mode
From: Ackerley Tng via B4 Relay
Date: Thu Oct 22 2026 - 19:48:54 EST
From: Ackerley Tng <ackerleytng@xxxxxxxxxx>
In folio mode, folios truncated on inode destruction are reclaimed via
aops->free_folio (kvm_gmem_free_folio), calling kvm_arch_gmem_reclaim()
to reset hardware confidential VM state (e.g. SEV-SNP RMP entries).
In PFN mode, memory is not backed by page cache folios, so
kvm_gmem_free_folio() is never invoked.
Do the reclaim during kvm_gmem_destroy_inode() when in PFN mode across the
entire file range, ensuring that any confidential architecture state on
provider PFNs is reclaimed before releasing the provider.
Signed-off-by: Ackerley Tng <ackerleytng@xxxxxxxxxx>
---
virt/kvm/guest_memfd.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c
index 0819c3653e88a..88eae9d6d249f 100644
--- a/virt/kvm/guest_memfd.c
+++ b/virt/kvm/guest_memfd.c
@@ -1643,6 +1643,13 @@ static void kvm_gmem_destroy_inode(struct inode *inode)
{
struct gmem_inode *gi = GMEM_I(inode);
+ /*
+ * Skip if the provider was not yet set up, as iput() can reach this on
+ * error paths before provider_ops is initialized.
+ */
+ if (gi->provider_ops && kvm_gmem_is_pfn_mode(gi))
+ kvm_gmem_pfn_reclaim(gi, 0, i_size_read(inode) >> PAGE_SHIFT);
+
gmem_provider_release(gi);
mpol_free_shared_policy(&gi->policy);
--
2.56.0.257.gf7497c7d27-goog