>  
> +static int count_mem_nodes(void)
> +{
> +     int node, count = 0;
> +
> +     for (node = 0; node <= numa_max_node(); node++) {
> +             if (numa_node_size(node, NULL) > 0)
> +                     count++;
> +     }
> +
> +     return count;
> +}
> +

Can we instead build upon our existing helpers get_first_mem_node() +
get_next_mem_node() ?

>From 432774fb50237519c1c041e402fddfdf4b35aa2c Mon Sep 17 00:00:00 2001
From: "David Hildenbrand (Arm)" <[email protected]>
Date: Fri, 26 Jun 2026 17:52:21 +0200
Subject: [PATCH] tmp

Signed-off-by: David Hildenbrand (Arm) <[email protected]>
---
 tools/testing/selftests/mm/ksm_tests.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/tools/testing/selftests/mm/ksm_tests.c 
b/tools/testing/selftests/mm/ksm_tests.c
index a050f4840cfa3..2ebbb544c6711 100644
--- a/tools/testing/selftests/mm/ksm_tests.c
+++ b/tools/testing/selftests/mm/ksm_tests.c
@@ -440,9 +440,9 @@ static int get_next_mem_node(int node)
                mem_node = i % (max_node + 1);
                node_size = numa_node_size(mem_node, NULL);
                if (node_size > 0)
-                       break;
+                       return mem_node;
        }
-       return mem_node;
+       return -ENODEV;
 }
 
 static int get_first_mem_node(void)
@@ -455,8 +455,8 @@ static int check_ksm_numa_merge(int merge_type, int 
mapping, int prot, int timeo
 {
        void *numa1_map_ptr, *numa2_map_ptr;
        struct timespec start_time;
+       int first_node, second_node;
        int page_count = 2;
-       int first_node;
 
        if (clock_gettime(CLOCK_MONOTONIC_RAW, &start_time)) {
                ksft_perror("clock_gettime");
@@ -467,17 +467,19 @@ static int check_ksm_numa_merge(int merge_type, int 
mapping, int prot, int timeo
                ksft_print_msg("NUMA support not enabled\n");
                return KSFT_SKIP;
        }
-       if (numa_num_configured_nodes() <= 1) {
-               ksft_print_msg("At least 2 NUMA nodes must be available\n");
+       first_node = get_first_mem_node();
+       second_node = get_next_mem_node(first_node);
+
+       if (second_node < 0) {
+               ksft_print_msg("At least 2 NUMA nodes with memory must be 
available\n");
                return KSFT_SKIP;
        }
        if (ksm_write_sysfs(KSM_FP("merge_across_nodes"), merge_across_nodes))
                return KSFT_FAIL;
 
        /* allocate 2 pages in 2 different NUMA nodes and fill them with the 
same data */
-       first_node = get_first_mem_node();
        numa1_map_ptr = numa_alloc_onnode(page_size, first_node);
-       numa2_map_ptr = numa_alloc_onnode(page_size, 
get_next_mem_node(first_node));
+       numa2_map_ptr = numa_alloc_onnode(page_size, second_node);
        if (!numa1_map_ptr || !numa2_map_ptr) {
                ksft_perror("numa_alloc_onnode");
                return KSFT_FAIL;
-- 
2.43.0


-- 
Cheers,

David

Reply via email to