[PATCH RFC 0/3] KVM: guest_memfd: folio migration for non-confidential VMs

From: Shivank Garg

Date: Thu Jun 11 2026 - 09:09:32 EST


guest_memfd folios are currently marked unmovable, so the kernel cannot
perform NUMA-balancing, memory compaction, etc. This is unavoidable for
confidential VMs (SEV-SNP, TDX), since memory is encrypted and copying it
needs firmware assistance. However, for non-confidential VMs (like
Firecracker), we can migrate the folios.

This series enables folio migration for non-confidential guest_memfd and
also lays the groundwork for migrating confidential guest_memfd later.
Once firmware-assisted copying support is available, those VMs can be
made movable, the confidential folio content can be copied separately,
and the destination folio marked with FOLIO_CONTENT_COPIED so
__migrate_folio() skips the host-side folio_mc_copy().

Testing
-------
Host: 7.1-rc7 + this, 2 NUMA nodes

- KVM selftest: allocate folios on node 0, migrate them to node 1 and
back and verify resulting NUMA node and the folio contents at each
step.

- Firecracker [1]: booted a microVM backed by guest_memfd. While the
guest was running, forced host-side migration of its folios via
migratepages(8) and explicit move_pages(2) of guest_memfd
pages. Verify with /proc/firecracker_pid/numa_maps.

[1] https://github.com/firecracker-microvm/firecracker/tree/feature/secret-hiding
and change builder.rs to remove GUEST_MEMFD_FLAG_NO_DIRECT_MAP from
vm.create_guest_memfd()

Best regards,
Shivank

Signed-off-by: Shivank Garg <shivankg@xxxxxxx>
---
Shivank Garg (3):
mm: split AS_UNMOVABLE back out of AS_INACCESSIBLE
KVM: guest_memfd: support folio migration for non-confidential VMs
KVM: selftests: exercise guest_memfd folio migration

include/linux/pagemap.h | 24 ++++++--
mm/compaction.c | 12 ++--
mm/migrate.c | 2 +-
tools/testing/selftests/kvm/guest_memfd_test.c | 77 ++++++++++++++++++++++++++
virt/kvm/guest_memfd.c | 49 ++++++++++++++--
5 files changed, 149 insertions(+), 15 deletions(-)
---
base-commit: 4549871118cf616eecdd2d939f78e3b9e1dddc48
change-id: 20260611-shivank-gmem-migrate-8c1c519b30a6

Best regards,
--
Shivank Garg <shivankg@xxxxxxx>