selftests-mm-handle-einval-when-configuring-gigantic-hugepages.patch removed from -mm tree
The quilt patch titled
Subject: selftests/mm: handle EINVAL when configuring gigantic hugepages
has been removed from the -mm tree. Its filename was
selftests-mm-handle-einval-when-configuring-gigantic-hugepages.patch
This patch was dropped because it was merged into the mm-stable branch of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: Sayali Patil <[email protected]>
Subject: selftests/mm: handle EINVAL when configuring gigantic hugepages
Date: Wed, 8 Jul 2026 12:29:05 +0530
Patch series "selftests/mm: avoid false failures in hugetlb and KSM tests", v3.
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. Use the existing helpers to identify NUMA nodes that contain memory and skip the test when fewer than two such nodes are available.
Patch 3 fixes a pre-existing operator precedence issue in ksm_tests, where a ternary expression combined with logical OR operators could be evaluated differently than intended. Added parentheses to ensure the correct evaluation order.
These changes improve handling of unsupported test configurations and unmet test prerequisites, avoiding spurious failures.
This patch (of 3):
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.
Ignore -EINVAL when configuring nr_hugepages so that tests continue to run on systems where gigantic hugepage allocation is unsupported.
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 [PASS]
---
tools/testing/selftests/mm/hugepage_settings.c | 2 - tools/testing/selftests/mm/vm_util.c | 26 ++++++++++++--- tools/testing/selftests/mm/vm_util.h | 1 3 files changed, 24 insertions(+), 5 deletions(-)
tools/testing/selftests/mm/hugepage_settings.c renamed from tools/testing/selftests/mm/hugepage_settings.c~selftests-mm-handle-einval-when-configuring-gigantic-hugepages +1 -1
@@ -437,7 +437,7 @@ void hugetlb_set_nr_pages(unsigned longhugetlb_sysfs_path (path,sizeof (path), size,"nr_hugepages" ); -write_num (path, nr); +write_num_ignore_einval (path, nr); }unsigned long hugetlb_free_pages (unsigned long size)
tools/testing/selftests/mm/vm_util.c renamed from tools/testing/selftests/mm/vm_util.c~selftests-mm-handle-einval-when-configuring-gigantic-hugepages +22 -4
@@ -719,7 +719,7 @@ int read_file(const char *path, char *bureturn (unsigned int ) numread; } -void write_file (const char *path,const char *buf,size_t buflen) +static void __write_file (const char *path,const char *buf,size_t buflen,bool ignore_einval) {int fd, saved_errno;ssize_t numwritten;
@@ -735,14 +735,22 @@ void write_file(const char *path, const saved_errno = errno;close (fd); errno = saved_errno; -if (numwritten <0 ) +if (numwritten <0 ) { +if (ignore_einval && errno ==EINVAL ) +return ;ksft_exit_fail_msg ("%s write(%.*s) failed: %s\n" , path, (int )(buflen -1 ), buf,strerror (errno)); + }if (numwritten != buflen -1 )ksft_exit_fail_msg ("%s write(%.*s) is truncated, expected %zu bytes, got %zd bytes\n" , path, (int )(buflen -1 ), buf, buflen -1 , numwritten); } +void write_file (const char *path,const char *buf,size_t buflen) +{ +__write_file (path, buf, buflen,/* ignore_einval = */ false); +} +unsigned long read_num (const char *path) {char buf[21 ];
@@ -753,12 +761,22 @@ unsigned long read_num(const char *path)return strtoul (buf,NULL ,10 ); } -void write_num (const char *path,unsigned long num) +static void __write_num (const char *path,unsigned long num,bool ignore_einval) {char buf[21 ];sprintf (buf,"%lu" , num); -write_file (path, buf,strlen (buf) +1 ); +__write_file (path, buf,strlen (buf) +1 , ignore_einval); +} + +void write_num (const char *path,unsigned long num) +{ +return __write_num (path, num,/* ignore_einval = */ false); +} + +void write_num_ignore_einval (const char *path,unsigned long num) +{ +return __write_num (path, num,/* ignore_einval = */ true); }static unsigned long shmall, shmmax;
tools/testing/selftests/mm/vm_util.h renamed from tools/testing/selftests/mm/vm_util.h~selftests-mm-handle-einval-when-configuring-gigantic-hugepages +1 -0
@@ -168,6 +168,7 @@ void write_file(const char *path, constint read_file (const char *path,char *buf,size_t buflen);unsigned long read_num (const char *path);void write_num (const char *path,unsigned long num); +void write_num_ignore_einval (const char *path,unsigned long num);void shm_limits_prepare (unsigned long length);void __shm_limits_restore (void );
_
Patches currently in -mm which might be from [email protected] are