selftests/mm: hugetlb-shm: add setup of HugeTLB pages

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>
This commit is contained in:
Mike Rapoport (Microsoft) 2026-05-11 19:28:26 +03:00 committed by Andrew Morton
parent a914785f63
commit 2d6d040ccf

View File

@ -29,9 +29,27 @@
#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()