To test GUEST_MEMFD_FLAG_BIND_NODE - extend create_guest_memfd() to
accept a node.

Ignore the node argument if the BIND_NODE flag is not provided.

Signed-off-by: Gregory Price <[email protected]>
Assisted-by: Claude:claude-opus-5
---
 .../testing/selftests/kvm/guest_memfd_test.c  | 50 ++++++++++++++++---
 1 file changed, 42 insertions(+), 8 deletions(-)

diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c 
b/tools/testing/selftests/kvm/guest_memfd_test.c
index 2233d871a38f4..1818e0fea5690 100644
--- a/tools/testing/selftests/kvm/guest_memfd_test.c
+++ b/tools/testing/selftests/kvm/guest_memfd_test.c
@@ -25,6 +25,31 @@
 
 static size_t page_size;
 
+static int __create_guest_memfd_node(struct kvm_vm *vm, u64 size, u64 flags,
+                                    u32 node, u32 pad)
+{
+       struct kvm_create_guest_memfd guest_memfd = {
+               .size = size,
+               .flags = flags,
+               .node = node,
+               .pad = pad,
+       };
+
+       return __vm_ioctl(vm, KVM_CREATE_GUEST_MEMFD, &guest_memfd);
+}
+
+static int create_guest_memfd(struct kvm_vm *vm, u64 size, u64 flags, u32 node)
+{
+       int fd;
+
+       if (!(flags & GUEST_MEMFD_FLAG_BIND_NODE))
+               return vm_create_guest_memfd(vm, size, flags);
+
+       fd = __create_guest_memfd_node(vm, size, flags, node, 0);
+       TEST_ASSERT(fd >= 0, KVM_IOCTL_ERROR(KVM_CREATE_GUEST_MEMFD, fd));
+       return fd;
+}
+
 static void test_file_read_write(int fd, size_t total_size)
 {
        char buf[64];
@@ -418,26 +443,35 @@ static void test_guest_memfd_flags(struct kvm_vm *vm)
        }
 }
 
-#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, __node, args...) \
+do {                                                                      \
+       int fd = create_guest_memfd(__vm, __gmem_size, __flags, __node);   \
+                                                                          \
+       test_##__test(args);                                               \
+       close(fd);                                                         \
 } while (0)
 
 #define __gmem_test(__test, __vm, __flags, __gmem_size)                        
\
-       ____gmem_test(__test, __vm, __flags, __gmem_size, fd, __gmem_size)
+       ____gmem_test(__test, __vm, __flags, __gmem_size, 0, fd, __gmem_size)
 
 #define gmem_test(__test, __vm, __flags)                               \
        __gmem_test(__test, __vm, __flags, page_size * 4)
 
 #define __gmem_test_vm(__test, __vm, __flags, __gmem_size)             \
-       ____gmem_test(__test, __vm, __flags, __gmem_size, __vm, fd, __gmem_size)
+       ____gmem_test(__test, __vm, __flags, __gmem_size, 0,            \
+                     __vm, fd, __gmem_size)
 
 #define gmem_test_vm(__test, __vm, __flags)                            \
        __gmem_test_vm(__test, __vm, __flags, page_size * 4)
 
+#define __gmem_test_node(__test, __vm, __flags, __gmem_size, __node)   \
+       ____gmem_test(__test, __vm,                                     \
+                     (__flags) | GUEST_MEMFD_FLAG_BIND_NODE,           \
+                     __gmem_size, __node, fd, __gmem_size, __node)
+
+#define gmem_test_node(__test, __vm, __flags, __node)                  \
+       __gmem_test_node(__test, __vm, __flags, page_size * 4, __node)
+
 static void __test_guest_memfd(struct kvm_vm *vm, u64 flags)
 {
        test_create_guest_memfd_multiple(vm);
-- 
2.53.0-Meta


Reply via email to