On 9/14/26 09:30, Yeoreum Yun wrote:
> check_huge_shmem() was required to distinguish shmem huge pages because
> /proc/self/smaps reports them using a dedicated “ShmemPmdMapped” entry,
> as opposed to “FilePmdMapped” for file-backed huge pages.
>
> Now that /proc/self/smaps is no longer used to detect huge pages and
> /proc/kpageflags is used instead, it is sufficient to distinguish
> between file-backed and anonymous pages since the ShmemPmdMapped is also
> kind of file-backed.
>
> Therefore, remove check_huge_shmem() and use check_huge_file() instead.
>
> Suggested-by: David Hildenbrand (Arm) <[email protected]>
> Signed-off-by: Yeoreum Yun <[email protected]>
> ---
> tools/testing/selftests/mm/folio_split_race_test.c | 2 +-
> tools/testing/selftests/mm/khugepaged.c | 5 ++---
> tools/testing/selftests/mm/uffd-common.c | 4 ++--
> tools/testing/selftests/mm/vm_util.c | 11 +----------
> tools/testing/selftests/mm/vm_util.h | 2 --
> 5 files changed, 6 insertions(+), 18 deletions(-)
>
> diff --git a/tools/testing/selftests/mm/folio_split_race_test.c
> b/tools/testing/selftests/mm/folio_split_race_test.c
> index 1960635a953e..4c0d3b6a411b 100644
> --- a/tools/testing/selftests/mm/folio_split_race_test.c
> +++ b/tools/testing/selftests/mm/folio_split_race_test.c
> @@ -182,7 +182,7 @@ static uint64_t run_iteration(void)
> for (i = 0; i < TOTAL_PAGES; i++)
> fill_page(mmap_base, i);
>
> - if (!check_huge_shmem(mmap_base, FILE_SIZE, NR_PMD_PAGE, pmd_pagesize))
> + if (!check_huge_file(mmap_base, FILE_SIZE, NR_PMD_PAGE, pmd_pagesize))
> ksft_exit_fail_msg("No shmem THP is allocated\n");
>
> if (pthread_barrier_init(&ctl.barrier, NULL, NUM_READER_THREADS + 1) !=
> 0)
> diff --git a/tools/testing/selftests/mm/khugepaged.c
> b/tools/testing/selftests/mm/khugepaged.c
> index f82673f5f6b4..6cd1effea465 100644
> --- a/tools/testing/selftests/mm/khugepaged.c
> +++ b/tools/testing/selftests/mm/khugepaged.c
> @@ -416,9 +416,8 @@ static bool file_check_huge(void *addr, size_t len, int
> nr_hpages,
> {
> switch (finfo.type) {
> case VMA_FILE:
> - return check_huge_file(addr, len, nr_hpages, hpage_size);
> case VMA_SHMEM:
> - return check_huge_shmem(addr, len, nr_hpages, hpage_size);
> + return check_huge_file(addr, len, nr_hpages, hpage_size);
> default:
> ksft_exit_fail_msg("Unknown VMA type\n");
> return false;
Assuming we do:
diff --git a/tools/testing/selftests/mm/khugepaged.c
b/tools/testing/selftests/mm/khugepaged.c
index f82673f5f6b47..9542173a748e2 100644
--- a/tools/testing/selftests/mm/khugepaged.c
+++ b/tools/testing/selftests/mm/khugepaged.c
@@ -53,7 +53,7 @@ struct mem_ops {
void *(*setup_area)(int nr_hpages);
void (*cleanup_area)(void *p, unsigned long size);
void (*fault)(void *p, unsigned long start, unsigned long end);
- bool (*check_huge)(void *addr, size_t len, int nr_hpages, unsigned long
hpage_size);
+ bool (*check_huge)(void *addr, size_t len, int nr_hpages, uint64_t
hpage_size);
const char *name;
};
Could we then simply use check_huge_anon/check_huge_file directly and get rid of
these helpers anon_check_huge + check_huge_file entirely?
--
Cheers,
David