On 10/10/2026 11:32 AM, Binbin Wu wrote: > On 10/2/2026 3:37 AM, Lisa Wang wrote: >> With guest_memfd in-place conversion, the memory region can be set as >> shared, eliminating the need for dual-backed memory. >> >> By setting the region to shared initially, the KVM selftest framework >> can populate the mmap()-ed guest_memfd memory just like any standard >> memory provider. >> >> For CoCo VMs, pages that need to be private are explicitly set to >> private before executing the VM. >> >> Signed-off-by: Lisa Wang <[email protected]> >> --- >> tools/testing/selftests/kvm/lib/kvm_util.c | 20 ++++++++++++++------ >> tools/testing/selftests/kvm/lib/x86/tdx/tdx_util.c | 6 +++++- >> 2 files changed, 19 insertions(+), 7 deletions(-) >> >> diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c >> b/tools/testing/selftests/kvm/lib/kvm_util.c >> index 7625908caf21..f474664b5d92 100644 >> --- a/tools/testing/selftests/kvm/lib/kvm_util.c >> +++ b/tools/testing/selftests/kvm/lib/kvm_util.c >> @@ -494,8 +494,10 @@ struct kvm_vm *__vm_create(struct vm_shape shape, u32 >> nr_runnable_vcpus, >> u64 nr_pages = vm_nr_pages_required(shape.mode, nr_runnable_vcpus, >> nr_extra_pages); >> struct userspace_mem_region *slot0; >> + u64 gmem_flags = 0; >> struct kvm_vm *vm; >> - int i, flags; >> + int flags = 0; >> + int i; >> >> kvm_set_files_rlimit(nr_runnable_vcpus); >> >> @@ -505,14 +507,20 @@ struct kvm_vm *__vm_create(struct vm_shape shape, u32 >> nr_runnable_vcpus, >> vm = ____vm_create(shape); >> >> /* >> - * Force GUEST_MEMFD for the primary memory region if necessary, e.g. >> - * for CoCo VMs that require GUEST_MEMFD backed private memory. >> + * Force GUEST_MEMFD for the primary memory region if necessary, and >> + * initialize it as shared if in-place conversion is supported, so the >> + * selftest framework can populate it exactly like other memory >> + * providers. >> */ >> - flags = 0; >> - if (is_guest_memfd_required(shape)) >> + if (is_guest_memfd_required(shape)) { >> flags |= KVM_MEM_GUEST_MEMFD; >> + if (kvm_has_gmem_attributes) >> + gmem_flags |= GUEST_MEMFD_FLAG_INIT_SHARED | >> + GUEST_MEMFD_FLAG_MMAP; >> + } >> >> - vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS, 0, 0, nr_pages, >> flags); >> + vm_mem_add(vm, VM_MEM_SRC_ANONYMOUS, 0, 0, nr_pages, flags, >> + -1, 0, gmem_flags); > This is common for both TDX and SNP, does it break SNP?
As I commented in the v14[1], I still believe this part belongs to gmem in-place conversion series. Without this part, I think the SNP selftests will fail if in-place conversion is enabled. Ackerley, did you test SNP selftests? [1] https://lore.kernel.org/kvm/[email protected]/

