On 5/22/2026 7:16 AM, Lisa Wang wrote:
> 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);

The build failed due to this:

lib/kvm_util.c: In function ‘__vm_create’:
lib/kvm_util.c:507:9: error: too many arguments to function ‘vm_mem_add’
  507 |         vm_mem_add(vm, VM_MEM_SRC_ANONYMOUS, 0, 0, nr_pages, flags, -1, 
0, gmem_flags);
      |         ^~~~~~~~~~
In file included from lib/kvm_util.c:9:
include/kvm_util.h:714:6: note: declared here
  714 | void vm_mem_add(struct kvm_vm *vm, enum vm_mem_backing_src_type 
src_type,
      |      ^~~~~~~~~~
lib/kvm_util.c: At top level:
cc1: note: unrecognized command-line option 
‘-Wno-gnu-variable-sized-type-not-at-end’ may have been intended to silence 
earlier diagnostics

It seems the patch set doesn't wire gmem_flags parameter to vm_mem_add().

>       for (i = 0; i < NR_MEM_REGIONS; i++)
>               vm->memslots[i] = 0;
>  
> 


Reply via email to