]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests/mm: hugetlb-shm: add setup of HugeTLB pages
authorMike Rapoport (Microsoft) <rppt@kernel.org>
Mon, 11 May 2026 16:28:26 +0000 (19:28 +0300)
committerAndrew Morton <akpm@linux-foundation.org>
Sun, 21 Jun 2026 18:37:28 +0000 (11:37 -0700)
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.

Link: https://lore.kernel.org/20260511162840.375890-43-rppt@kernel.org
Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
Tested-by: Luiz Capitulino <luizcap@redhat.com>
Tested-by: Sarthak Sharma <sarthak.sharma@arm.com>
Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: Barry Song <baohua@kernel.org>
Cc: David Hildenbrand <david@kernel.org>
Cc: Dev Jain <dev.jain@arm.com>
Cc: Donet Tom <donettom@linux.ibm.com>
Cc: Jason Gunthorpe <jgg@ziepe.ca>
Cc: John Hubbard <jhubbard@nvidia.com>
Cc: Lance Yang <lance.yang@linux.dev>
Cc: Leon Romanovsky <leon@kernel.org>
Cc: Liam Howlett <liam@infradead.org>
Cc: Li Wang <li.wang@linux.dev>
Cc: Lorenzo Stoakes <ljs@kernel.org>
Cc: Mark Brown <broonie@kernel.org>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Nico Pache <npache@redhat.com>
Cc: Peter Xu <peterx@redhat.com>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Vlastimil Babka <vbabka@kernel.org>
Cc: Zi Yan <ziy@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
tools/testing/selftests/mm/hugetlb-shm.c

index c2c7aee85b964a57af7430d685dae854600dd578..3ff7f062b7eb450d6a9c8f3f3220a34bbf3d03eb 100644 (file)
 #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();
+       if (!hugepage_size)
+               ksft_exit_skip("Unable to determine huge page size\n");
+
+       length = (LENGTH + hugepage_size - 1) & ~(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 +59,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");
@@ -76,3 +96,5 @@ int main(void)
        ksft_test_result_pass("hugepage using SysV shmget/shmat\n");
        ksft_finished();
 }
+
+SHM_LIMITS_RESTORE()