On 7/23/2026 7:13 AM, Lisa Wang wrote:
diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c 
b/tools/testing/selftests/kvm/lib/kvm_util.c
index 4a48c4b42095..e547ea341ff7 100644
--- a/tools/testing/selftests/kvm/lib/kvm_util.c
+++ b/tools/testing/selftests/kvm/lib/kvm_util.c
@@ -484,8 +484,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); @@ -495,14 +497,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 support, 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);
        for (i = 0; i < NR_MEM_REGIONS; i++)
                vm->memslots[i] = 0;

IMO, this diff belongs to the gmem in-place series.

Reply via email to