[PATCH v3 41/54] selftests/mm: hugetlb-shm: add setup of HugeTLB pages
From: Mike Rapoport
Date: Tue Apr 28 2026 - 16:56:20 EST
From: "Mike Rapoport (Microsoft)" <rppt@xxxxxxxxxx>
hugetlb-shm test fails if there are no free huge pages prepared by a
wrapper script and shm liimts in proc are too low.
Add setup of HugeTLB pages and shm limits to the test and make sure that
the original settings are restored on the test exit.
Signed-off-by: Mike Rapoport (Microsoft) <rppt@xxxxxxxxxx>
---
tools/testing/selftests/mm/hugetlb-shm.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/tools/testing/selftests/mm/hugetlb-shm.c b/tools/testing/selftests/mm/hugetlb-shm.c
index 0f70b1a50b6b..7b5a5cefe458 100644
--- a/tools/testing/selftests/mm/hugetlb-shm.c
+++ b/tools/testing/selftests/mm/hugetlb-shm.c
@@ -29,9 +29,24 @@
#include <sys/mman.h>
#include "vm_util.h"
+#include "hugepage_settings.h"
#define LENGTH (256UL*1024*1024)
+static void prepare(void)
+{
+ unsigned long length, hugepage_size, nr;
+
+ hugepage_size = default_huge_page_size();
+ length = (LENGTH + hugepage_size) & ~(hugepage_size - 1);
+ nr = length / hugepage_size;
+
+ if (!hugetlb_setup_default(nr))
+ ksft_exit_skip("Not enough free huge pages\n");
+
+ shm_limits_prepare(length);
+}
+
int main(void)
{
int shmid;
@@ -41,6 +56,8 @@ int main(void)
ksft_print_header();
ksft_set_plan(1);
+ prepare();
+
shmid = shmget(2, LENGTH, SHM_HUGETLB | IPC_CREAT | SHM_R | SHM_W);
if (shmid < 0)
ksft_exit_fail_perror("shmget");
@@ -78,3 +95,5 @@ int main(void)
ksft_test_result_pass("hugepage using SysV shmget/shmat\n");
ksft_finished();
}
+
+SHM_LIMITS_RESTORE()
--
2.53.0