On 4/29/26 2:12 AM, Mike Rapoport wrote:
> From: "Mike Rapoport (Microsoft)" <[email protected]>
>
> 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) <[email protected]>
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 <[email protected]>
> ---
> 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));