test_numa_allocation() assumes that nodes 0 and 1 exist and are usable.
That is not guaranteed on systems with sparse or memoryless nodes, or
when a cpuset restricts the task.

Pick two nodes from MPOL_F_MEMS_ALLOWED and use MAXNODE_FOR_MASK() when
passing the masks to mbind().  Keep the two-node requirement because the
test verifies that pages are allocated on different nodes.

Signed-off-by: Shivank Garg <[email protected]>
---
 tools/testing/selftests/kvm/guest_memfd_test.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c 
b/tools/testing/selftests/kvm/guest_memfd_test.c
index ea8e38064e83..cc5abca1adae 100644
--- a/tools/testing/selftests/kvm/guest_memfd_test.c
+++ b/tools/testing/selftests/kvm/guest_memfd_test.c
@@ -127,18 +127,19 @@ static void test_mbind(int fd, size_t total_size)
 static void test_numa_allocation(int fd, size_t total_size)
 {
        unsigned long node0_mask, node1_mask;
-       unsigned long maxnode = 8;
+       unsigned long maxnode = MAXNODE_FOR_MASK(node0_mask);
+       unsigned long mems_allowed;
        int nid0, nid1;
        void *pages[4];
        int status[4];
        char *mem;
        int i;
 
-       if (!is_multi_numa_node_system())
+       if (kvm_get_numa_memory_nodes(&mems_allowed) < 2)
                return;
 
-       nid0 = 0;
-       nid1 = 1;
+       nid0 = kvm_get_next_numa_node(mems_allowed, -1);
+       nid1 = kvm_get_next_numa_node(mems_allowed, nid0);
        node0_mask = BIT(nid0);
        node1_mask = BIT(nid1);
 

-- 
2.43.0


Reply via email to