* [PATCH 0/2] selftests/mm: avoid false failures in hugetlb and KSM tests
@ 2026-06-25 12:40 Sayali Patil
2026-06-25 12:40 ` [PATCH 1/2] selftests/mm: handle EINVAL when configuring gigantic hugepages Sayali Patil
2026-06-25 12:40 ` [PATCH 2/2] selftests/mm: fix ksm NUMA merge test for systems with memoryless NUMA nodes Sayali Patil
0 siblings, 2 replies; 5+ messages in thread
From: Sayali Patil @ 2026-06-25 12:40 UTC (permalink / raw)
To: Andrew Morton, Shuah Khan, linux-mm, linux-kernel,
linux-kselftest, Ritesh Harjani
Cc: David Hildenbrand, Zi Yan, Michal Hocko, Oscar Salvador,
Lorenzo Stoakes, Dev Jain, Liam.Howlett, linuxppc-dev, Miaohe Lin,
Venkat Rao Bagalkote, Sayali Patil
Hi all,
This series fixes issues in the hugetlb and KSM MM selftest categories
that can report failures when the prerequisites for the tests are not
satisfied.
Patch 1 updates the hugetlb selftest helpers to handle -EINVAL when
attempting to configure gigantic HugeTLB pages via nr_hugepages.
PowerPC hash MMU pSeries systems expose gigantic hugepage sizes
but do not allow runtime allocation of such pages,
causing the sysfs write to fail. Handle this case gracefully and
continue running the test instead of aborting.
Patch 2 fixes the KSM NUMA merge test on systems with memoryless NUMA
nodes. The test currently relies on the number of configured NUMA nodes
and may attempt allocations on nodes that have no memory, resulting in
spurious failures. Count only NUMA nodes that contain memory and skip
the test when fewer than two such nodes are available.
These changes improve handling of unsupported test configurations and
unmet test prerequisites, avoiding spurious failures.
Thanks,
Sayali
Sayali Patil (2):
selftests/mm: handle EINVAL when configuring gigantic hugepages
selftests/mm: fix ksm NUMA merge test for systems with memoryless NUMA
nodes
tools/testing/selftests/mm/ksm_tests.c | 26 ++++++++++++++++++--------
tools/testing/selftests/mm/vm_util.c | 7 +++++++
2 files changed, 25 insertions(+), 8 deletions(-)
--
2.52.0
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH 1/2] selftests/mm: handle EINVAL when configuring gigantic hugepages 2026-06-25 12:40 [PATCH 0/2] selftests/mm: avoid false failures in hugetlb and KSM tests Sayali Patil @ 2026-06-25 12:40 ` Sayali Patil 2026-06-26 14:48 ` Usama Arif 2026-06-25 12:40 ` [PATCH 2/2] selftests/mm: fix ksm NUMA merge test for systems with memoryless NUMA nodes Sayali Patil 1 sibling, 1 reply; 5+ messages in thread From: Sayali Patil @ 2026-06-25 12:40 UTC (permalink / raw) To: Andrew Morton, Shuah Khan, linux-mm, linux-kernel, linux-kselftest, Ritesh Harjani Cc: David Hildenbrand, Zi Yan, Michal Hocko, Oscar Salvador, Lorenzo Stoakes, Dev Jain, Liam.Howlett, linuxppc-dev, Miaohe Lin, Venkat Rao Bagalkote, Sayali Patil Some MM selftests attempt to configure the amount of HugeTLB pages of different sizes by writing to nr_hugepages. PowerPC hash MMU pSeries systems advertise gigantic hugepage sizes but do not support runtime allocation of such pages, writes to the corresponding nr_hugepages file fail with -EINVAL. This causes the test to bail out even though the failure is due to a platform limitation rather than the functionality being tested. Treat -EINVAL from the sysfs write as a skipped configuration request and continue running the test instead of failing. Before patch: ------------------------- running ./hugetlb-madvise ------------------------- TAP version 13 1..1 [INFO] detected hugetlb page size: 16777216 KiB [INFO] detected hugetlb page size: 16384 KiB ok 1 MADV_DONTNEED and MADV_REMOVE on hugetlb Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0 Bail out! /sys/kernel/mm/hugepages/hugepages-16777216kB/nr_hugepages write(0) failed: Invalid argument Totals: pass:0 fail:0 xfail:0 xpass:0 skip:0 error:0 [FAIL] After patch: ------------------------- running ./hugetlb-madvise ------------------------- TAP version 13 1..1 [INFO] detected hugetlb page size: 16777216 KiB [INFO] detected hugetlb page size: 16384 KiB ok 1 MADV_DONTNEED and MADV_REMOVE on hugetlb Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0 /sys/kernel/mm/hugepages/hugepages-16777216kB/nr_hugepages write(0) failed: Invalid argument [PASS] Fixes: 9d07250ea1eb ("selftests/mm: hugepage_settings: add APIs to get and set nr_hugepages") Signed-off-by: Sayali Patil <sayalip@linux.ibm.com> --- tools/testing/selftests/mm/vm_util.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tools/testing/selftests/mm/vm_util.c b/tools/testing/selftests/mm/vm_util.c index 311fc5b4513e..a8f16eef5c7c 100644 --- a/tools/testing/selftests/mm/vm_util.c +++ b/tools/testing/selftests/mm/vm_util.c @@ -735,6 +735,13 @@ void write_file(const char *path, const char *buf, size_t buflen) saved_errno = errno; close(fd); errno = saved_errno; + + if (numwritten < 0 && errno == EINVAL) { + ksft_print_msg("%s write(%.*s) failed: %s\n", path, + (int)(buflen - 1), buf, strerror(errno)); + return; + } + if (numwritten < 0) ksft_exit_fail_msg("%s write(%.*s) failed: %s\n", path, (int)(buflen - 1), buf, strerror(errno)); -- 2.52.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] selftests/mm: handle EINVAL when configuring gigantic hugepages 2026-06-25 12:40 ` [PATCH 1/2] selftests/mm: handle EINVAL when configuring gigantic hugepages Sayali Patil @ 2026-06-26 14:48 ` Usama Arif 0 siblings, 0 replies; 5+ messages in thread From: Usama Arif @ 2026-06-26 14:48 UTC (permalink / raw) To: Sayali Patil Cc: Usama Arif, Andrew Morton, Shuah Khan, linux-mm, linux-kernel, linux-kselftest, Ritesh Harjani, David Hildenbrand, Zi Yan, Michal Hocko, Oscar Salvador, Lorenzo Stoakes, Dev Jain, Liam.Howlett, linuxppc-dev, Miaohe Lin, Venkat Rao Bagalkote On Thu, 25 Jun 2026 18:10:16 +0530 Sayali Patil <sayalip@linux.ibm.com> wrote: > Some MM selftests attempt to configure the amount of > HugeTLB pages of different sizes by writing to nr_hugepages. > > PowerPC hash MMU pSeries systems advertise gigantic hugepage sizes > but do not support runtime allocation of such pages, writes > to the corresponding nr_hugepages file fail with -EINVAL. > This causes the test to bail out even though the failure is due > to a platform limitation rather than the > functionality being tested. > > Treat -EINVAL from the sysfs write as a skipped configuration request > and continue running the test instead of failing. > > Before patch: > ------------------------- > running ./hugetlb-madvise > ------------------------- > TAP version 13 > 1..1 > [INFO] detected hugetlb page size: 16777216 KiB > [INFO] detected hugetlb page size: 16384 KiB > ok 1 MADV_DONTNEED and MADV_REMOVE on hugetlb > Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0 > Bail out! /sys/kernel/mm/hugepages/hugepages-16777216kB/nr_hugepages > write(0) failed: Invalid argument > Totals: pass:0 fail:0 xfail:0 xpass:0 skip:0 error:0 > [FAIL] > > After patch: > ------------------------- > running ./hugetlb-madvise > ------------------------- > TAP version 13 > 1..1 > [INFO] detected hugetlb page size: 16777216 KiB > [INFO] detected hugetlb page size: 16384 KiB > ok 1 MADV_DONTNEED and MADV_REMOVE on hugetlb > Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0 > /sys/kernel/mm/hugepages/hugepages-16777216kB/nr_hugepages > write(0) failed: Invalid argument > [PASS] > > Fixes: 9d07250ea1eb ("selftests/mm: hugepage_settings: add APIs to get and set nr_hugepages") > Signed-off-by: Sayali Patil <sayalip@linux.ibm.com> > --- > tools/testing/selftests/mm/vm_util.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/tools/testing/selftests/mm/vm_util.c b/tools/testing/selftests/mm/vm_util.c > index 311fc5b4513e..a8f16eef5c7c 100644 > --- a/tools/testing/selftests/mm/vm_util.c > +++ b/tools/testing/selftests/mm/vm_util.c > @@ -735,6 +735,13 @@ void write_file(const char *path, const char *buf, size_t buflen) > saved_errno = errno; > close(fd); > errno = saved_errno; > + > + if (numwritten < 0 && errno == EINVAL) { > + ksft_print_msg("%s write(%.*s) failed: %s\n", path, > + (int)(buflen - 1), buf, strerror(errno)); > + return; > + } > + This makes write_file() silently succeed for every EINVAL, not just the gigantic-hugetlb setup case. Several callers use this helper for writes where EINVAL is a real test failure, for example drop_caches or split huge page setup. Those tests can now continue after a failed setup and report misleading results. Please keep the common helper strict and ignore EINVAL only in the hugetlb path that is probing unsupported gigantic page runtime allocation. > if (numwritten < 0) > ksft_exit_fail_msg("%s write(%.*s) failed: %s\n", path, (int)(buflen - 1), > buf, strerror(errno)); > -- > 2.52.0 > > ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/2] selftests/mm: fix ksm NUMA merge test for systems with memoryless NUMA nodes 2026-06-25 12:40 [PATCH 0/2] selftests/mm: avoid false failures in hugetlb and KSM tests Sayali Patil 2026-06-25 12:40 ` [PATCH 1/2] selftests/mm: handle EINVAL when configuring gigantic hugepages Sayali Patil @ 2026-06-25 12:40 ` Sayali Patil 2026-06-26 15:55 ` David Hildenbrand (Arm) 1 sibling, 1 reply; 5+ messages in thread From: Sayali Patil @ 2026-06-25 12:40 UTC (permalink / raw) To: Andrew Morton, Shuah Khan, linux-mm, linux-kernel, linux-kselftest, Ritesh Harjani Cc: David Hildenbrand, Zi Yan, Michal Hocko, Oscar Salvador, Lorenzo Stoakes, Dev Jain, Liam.Howlett, linuxppc-dev, Miaohe Lin, Venkat Rao Bagalkote, Sayali Patil The KSM NUMA merge test allocates identical pages on different NUMA nodes and verifies KSM behavior with merge_across_nodes enabled and disabled. On systems with memoryless NUMA nodes, for example: #numactl -H available: 2 nodes (0,4) ..... node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 node 0 size: 14825 MB node 0 free: 1382 MB node 4 cpus: node 4 size: 0 MB node 4 free: 0 MB the test may attempt to allocate memory on a node without memory, causing numa_alloc_onnode() to fail and resulting in a spurious test failure. Add count_mem_nodes() helper to count only nodes with memory and use it instead of numa_num_configured_nodes() to ensure the test runs only on systems with at least two NUMA nodes that have memory. Skip the test otherwise. Before patch: --------------------------- running ./ksm_tests -N -m 1 --------------------------- mbind: Invalid argument ok 1 KSM NUMA merging Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0 [PASS] ok 1 ksm_tests -N -m 1 --------------------------- running ./ksm_tests -N -m 0 --------------------------- mbind: Invalid argument not ok 1 KSM NUMA merging Totals: pass:0 fail:1 xfail:0 xpass:0 skip:0 error:0 [FAIL] not ok 2 ksm_tests -N -m 0 # exit=1 After patch: --------------------------- running ./ksm_tests -N -m 1 --------------------------- SKIP At least 2 NUMA nodes with memory must be available Totals: pass:0 fail:0 xfail:0 xpass:0 skip:1 error:0 [SKIP] ok 1 ksm_tests -N -m 1 # SKIP --------------------------- running ./ksm_tests -N -m 0 --------------------------- SKIP At least 2 NUMA nodes with memory must be available Totals: pass:0 fail:0 xfail:0 xpass:0 skip:1 error:0 [SKIP] ok 2 ksm_tests -N -m 0 # SKIP Fixes: e3820ab252dd ("selftest/vm: fix ksm selftest to run with different NUMA topologies") Signed-off-by: Sayali Patil <sayalip@linux.ibm.com> --- tools/testing/selftests/mm/ksm_tests.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/tools/testing/selftests/mm/ksm_tests.c b/tools/testing/selftests/mm/ksm_tests.c index a050f4840cfa..d1790b4347d3 100644 --- a/tools/testing/selftests/mm/ksm_tests.c +++ b/tools/testing/selftests/mm/ksm_tests.c @@ -450,6 +450,18 @@ static int get_first_mem_node(void) return get_next_mem_node(numa_max_node()); } +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; +} + static int check_ksm_numa_merge(int merge_type, int mapping, int prot, int timeout, bool merge_across_nodes, size_t page_size) { @@ -463,14 +475,12 @@ static int check_ksm_numa_merge(int merge_type, int mapping, int prot, int timeo return KSFT_FAIL; } - if (numa_available() < 0) { - 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"); - return KSFT_SKIP; - } + if (numa_available() < 0) + ksft_exit_skip("NUMA support not enabled\n"); + + if (count_mem_nodes() <= 1) + ksft_exit_skip("At least 2 NUMA nodes with memory must be available\n"); + if (ksm_write_sysfs(KSM_FP("merge_across_nodes"), merge_across_nodes)) return KSFT_FAIL; -- 2.52.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] selftests/mm: fix ksm NUMA merge test for systems with memoryless NUMA nodes 2026-06-25 12:40 ` [PATCH 2/2] selftests/mm: fix ksm NUMA merge test for systems with memoryless NUMA nodes Sayali Patil @ 2026-06-26 15:55 ` David Hildenbrand (Arm) 0 siblings, 0 replies; 5+ messages in thread From: David Hildenbrand (Arm) @ 2026-06-26 15:55 UTC (permalink / raw) To: Sayali Patil, Andrew Morton, Shuah Khan, linux-mm, linux-kernel, linux-kselftest, Ritesh Harjani Cc: Zi Yan, Michal Hocko, Oscar Salvador, Lorenzo Stoakes, Dev Jain, Liam.Howlett, linuxppc-dev, Miaohe Lin, Venkat Rao Bagalkote > > +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)" <david@kernel.org> Date: Fri, 26 Jun 2026 17:52:21 +0200 Subject: [PATCH] tmp Signed-off-by: David Hildenbrand (Arm) <david@kernel.org> --- 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 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-06-26 15:55 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-06-25 12:40 [PATCH 0/2] selftests/mm: avoid false failures in hugetlb and KSM tests Sayali Patil 2026-06-25 12:40 ` [PATCH 1/2] selftests/mm: handle EINVAL when configuring gigantic hugepages Sayali Patil 2026-06-26 14:48 ` Usama Arif 2026-06-25 12:40 ` [PATCH 2/2] selftests/mm: fix ksm NUMA merge test for systems with memoryless NUMA nodes Sayali Patil 2026-06-26 15:55 ` David Hildenbrand (Arm)
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox