Re: [PATCH v3 45/54] selftests/mm: pagemap_ioctl: add setup of HugeTLB pages
From: Sarthak Sharma
Date: Thu May 07 2026 - 07:46:27 EST
On 4/29/26 2:12 AM, Mike Rapoport wrote:
> From: "Mike Rapoport (Microsoft)" <rppt@xxxxxxxxxx>
>
> pagemap-ioctl skips HugeTLB tests if there are no free huge pages
> prepared by a wrapper script.
>
> Add setup of HugeTLB pages to the test and make sure that the original
> settings are restored on the test exit.
>
> Signed-off-by: Mike Rapoport (Microsoft) <rppt@xxxxxxxxxx>
I have run the test before and after applying the patch. Before the
patch, 18 HugeTLB subtests were skipped due to no preallocated
hugepages. After the patch, those subtests correctly allocate the
required hugepages and successfully pass.
Tested-by: Sarthak Sharma <sarthak.sharma@xxxxxxx>
> ---
> tools/testing/selftests/mm/pagemap_ioctl.c | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/tools/testing/selftests/mm/pagemap_ioctl.c b/tools/testing/selftests/mm/pagemap_ioctl.c
> index 7f9428d6062c..e2c62cb6978f 100644
> --- a/tools/testing/selftests/mm/pagemap_ioctl.c
> +++ b/tools/testing/selftests/mm/pagemap_ioctl.c
> @@ -7,8 +7,6 @@
> #include <sys/mman.h>
> #include <errno.h>
> #include <malloc.h>
> -#include "vm_util.h"
> -#include "kselftest.h"
> #include <linux/types.h>
> #include <linux/memfd.h>
> #include <linux/userfaultfd.h>
> @@ -23,6 +21,10 @@
> #include <sys/ipc.h>
> #include <sys/shm.h>
>
> +#include "vm_util.h"
> +#include "kselftest.h"
> +#include "hugepage_settings.h"
> +
> #define PAGEMAP_BITS_ALL (PAGE_IS_WPALLOWED | PAGE_IS_WRITTEN | \
> PAGE_IS_FILE | PAGE_IS_PRESENT | \
> PAGE_IS_SWAPPED | PAGE_IS_PFNZERO | \
> @@ -1554,6 +1556,9 @@ int main(int __attribute__((unused)) argc, char *argv[])
> if (init_uffd())
> ksft_exit_skip("Failed to initialize userfaultfd\n");
>
> + if (!hugetlb_setup_default(4))
> + ksft_exit_skip("Not enough huge pages\n");
> +
> ksft_set_plan(117);
>
> page_size = getpagesize();
> @@ -1605,7 +1610,7 @@ int main(int __attribute__((unused)) argc, char *argv[])
> }
>
> /* 5. SHM Hugetlb page testing */
> - mem_size = 2*1024*1024;
> + mem_size = default_huge_page_size();
> mem = gethugetlb_mem(mem_size, &shmid);
> if (mem) {
> wp_init(mem, mem_size);
> @@ -1633,7 +1638,7 @@ int main(int __attribute__((unused)) argc, char *argv[])
> }
>
> /* 7. File Hugetlb testing */
> - mem_size = 2*1024*1024;
> + mem_size = default_huge_page_size();
> fd = memfd_create("uffd-test", MFD_HUGETLB | MFD_NOEXEC_SEAL);
> if (fd < 0)
> ksft_exit_fail_msg("uffd-test creation failed %d %s\n", errno, strerror(errno));