From: Ackerley Tng Add test coverage verifying that creating a guest_memfd backed by an anonymous tmpfs mount descriptor returned by fsmount() succeeds and reports the requested file size. Signed-off-by: Ackerley Tng --- tools/testing/selftests/kvm/guest_memfd_test.c | 35 ++++++++++++++++++++------ 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing/selftests/kvm/guest_memfd_test.c index e8199ed17b0f8..73212d5307049 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -541,12 +541,23 @@ static void test_resource_fd_tmpfs_huge(struct kvm_vm *vm) close(pool_fd); } -#define ____gmem_test(__test, __vm, __flags, __gmem_size, args...) \ -do { \ - int fd = vm_create_guest_memfd(__vm, __gmem_size, __flags); \ - \ - test_##__test(args); \ - close(fd); \ +#define ____gmem_test(__test, __vm, __flags, __gmem_size, args...) \ +do { \ + int pool_fd = -1; \ + int fd; \ + \ + if ((__flags) & GUEST_MEMFD_FLAG_USE_RESOURCE) { \ + pool_fd = create_tmpfs_pool_fd("never", true, __gmem_size); \ + fd = vm_create_guest_memfd_resource(__vm, __gmem_size, \ + __flags, pool_fd); \ + } else { \ + fd = vm_create_guest_memfd(__vm, __gmem_size, __flags); \ + } \ + \ + test_##__test(args); \ + close(fd); \ + if (pool_fd >= 0) \ + close(pool_fd); \ } while (0) #define __gmem_test(__test, __vm, __flags, __gmem_size) \ @@ -606,15 +617,23 @@ static void test_guest_memfd(unsigned long vm_type) test_resource_fd_tmpfs_huge(vm); __test_guest_memfd(vm, 0); + __test_guest_memfd(vm, GUEST_MEMFD_FLAG_USE_RESOURCE); flags = vm_check_cap(vm, KVM_CAP_GUEST_MEMFD_FLAGS); - if (flags & GUEST_MEMFD_FLAG_MMAP) + if (flags & GUEST_MEMFD_FLAG_MMAP) { __test_guest_memfd(vm, GUEST_MEMFD_FLAG_MMAP); + __test_guest_memfd(vm, GUEST_MEMFD_FLAG_MMAP | + GUEST_MEMFD_FLAG_USE_RESOURCE); + } /* MMAP should always be supported if INIT_SHARED is supported. */ - if (flags & GUEST_MEMFD_FLAG_INIT_SHARED) + if (flags & GUEST_MEMFD_FLAG_INIT_SHARED) { __test_guest_memfd(vm, GUEST_MEMFD_FLAG_MMAP | GUEST_MEMFD_FLAG_INIT_SHARED); + __test_guest_memfd(vm, GUEST_MEMFD_FLAG_MMAP | + GUEST_MEMFD_FLAG_INIT_SHARED | + GUEST_MEMFD_FLAG_USE_RESOURCE); + } kvm_vm_free(vm); } -- 2.56.0.rc1.315.gc6ed9934b7-goog