Set the initial state of the first memory region as shared if it is
backed by guest_memfd, so that the KVM selftest framework functions can
populate mmap()-ed guest_memfd memory the same way memory from other
memory providers are populated.

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 | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c 
b/tools/testing/selftests/kvm/lib/kvm_util.c
index 9a29540fff40..1bab7d76a59c 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,16 @@ 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 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;
+               gmem_flags |= GUEST_MEMFD_FLAG_INIT_SHARED;
+       }
 
-       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;
 

-- 
2.54.0.746.g67dd491aae-goog


Reply via email to