Main changes since v9 [1]: - Dropped best-effort validation that the userspace memory address range matches the shared memory backed by guest_memfd - Rework handling faults for shared guest_memfd memory in arm64 - Track in the memslot whether it's backed by guest_memfd with shared memory support - Various fixes based on feedback from v9 - Rebase on Linux 6.15 The purpose of this series is to allow mapping guest_memfd backed memory at the host. This support enables VMMs like Firecracker to run guests backed completely by guest_memfd [2]. Combined with Patrick's series for direct map removal in guest_memfd [3], this would allow running VMs that offer additional hardening against Spectre-like transient execution attacks. This series will also serve as a base for _restricted_ mmap() support for guest_memfd backed memory at the host for CoCos that allow sharing guest memory in-place with the host [4]. Patches 1 to 7 are mainly about decoupling the concept of guest memory being private vs guest memory being backed by guest_memfd. They are mostly refactoring and renaming. Patches 8 and 9 add support for in-place shared memory, as well as the ability to map it by the host as long as it is shared, gated by a new configuration option, toggled by a new flag, and advertised to userspace by a new capability (introduced in patch 15). Patches 10 to 14 add x86 and arm64 support for in-place shared memory. Patch 15 introduces the capability that advertises support for in-place shared memory, and updates the documentation. Patch 16 adds selftests for the new features. For details on how to test this patch series, and on how to boot a guest has uses the new features, please refer to v8 [5]. Cheers, /fuad [1] https://lore.kernel.org/all/20250513163438.3942405-1-tabba@xxxxxxxxxx/ [2] https://github.com/firecracker-microvm/firecracker/tree/feature/secret-hiding [3] https://lore.kernel.org/all/20250221160728.1584559-1-roypat@xxxxxxxxxxxx/ [4] https://lore.kernel.org/all/20250328153133.3504118-1-tabba@xxxxxxxxxx/ [5] https://lore.kernel.org/all/20250430165655.605595-1-tabba@xxxxxxxxxx/ Ackerley Tng (2): KVM: x86/mmu: Handle guest page faults for guest_memfd with shared memory KVM: x86: Compute max_mapping_level with input from guest_memfd Fuad Tabba (14): KVM: Rename CONFIG_KVM_PRIVATE_MEM to CONFIG_KVM_GMEM KVM: Rename CONFIG_KVM_GENERIC_PRIVATE_MEM to CONFIG_KVM_GENERIC_GMEM_POPULATE KVM: Rename kvm_arch_has_private_mem() to kvm_arch_supports_gmem() KVM: x86: Rename kvm->arch.has_private_mem to kvm->arch.supports_gmem KVM: Rename kvm_slot_can_be_private() to kvm_slot_has_gmem() KVM: Fix comments that refer to slots_lock KVM: Fix comment that refers to kvm uapi header path KVM: guest_memfd: Allow host to map guest_memfd pages KVM: guest_memfd: Track shared memory support in memslot KVM: arm64: Refactor user_mem_abort() calculation of force_pte KVM: arm64: Handle guest_memfd-backed guest page faults KVM: arm64: Enable mapping guest_memfd in arm64 KVM: Introduce the KVM capability KVM_CAP_GMEM_SHARED_MEM KVM: selftests: guest_memfd mmap() test when mapping is allowed Documentation/virt/kvm/api.rst | 9 + arch/arm64/include/asm/kvm_host.h | 5 + arch/arm64/kvm/Kconfig | 1 + arch/arm64/kvm/mmu.c | 109 ++++++++++-- arch/x86/include/asm/kvm_host.h | 22 ++- arch/x86/kvm/Kconfig | 4 +- arch/x86/kvm/mmu/mmu.c | 135 +++++++++------ arch/x86/kvm/svm/sev.c | 4 +- arch/x86/kvm/svm/svm.c | 4 +- arch/x86/kvm/x86.c | 4 +- include/linux/kvm_host.h | 80 +++++++-- include/uapi/linux/kvm.h | 2 + tools/testing/selftests/kvm/Makefile.kvm | 1 + .../testing/selftests/kvm/guest_memfd_test.c | 162 +++++++++++++++--- virt/kvm/Kconfig | 15 +- virt/kvm/Makefile.kvm | 2 +- virt/kvm/guest_memfd.c | 101 ++++++++++- virt/kvm/kvm_main.c | 16 +- virt/kvm/kvm_mm.h | 4 +- 19 files changed, 553 insertions(+), 127 deletions(-) base-commit: 0ff41df1cb268fc69e703a08a57ee14ae967d0ca -- 2.49.0.1164.gab81da1b16-goog