[PATCH 0/2] kselftest: mm: fix some failure of split_huge_page_test

From: Yeoreum Yun

Date: Thu Aug 20 2026 - 15:44:05 EST


split_huge_page_test can fail for the following reasons:

1. During the test, khugepaged may collapse previously split pages again,
causing intermittent failures.

2. Since glibc commit 321e1fc73f (“malloc: Enable 2MB THP by default on AArch64”),
glibc may call madvise(MADV_HUGEPAGE) for sufficiently large allocations
made by memalign(). The underlying VMA may start at a different address
from the aligned address returned by memalign(). Moreover, a subsequent
madvise(MADV_HUGEPAGE) call does not split the VMA because it already
has the same advice.

This causes the test to fail because the check_huge_xxx() helpers
incorrectly require the address returned by memalign() to match the
VMA start address reported in /proc/self/smaps.

Address these issues by applying MADV_NOHUGEPAGE after faulting in the
huge page, preventing khugepaged from collapsing it again, and by replacing
the use of /proc/self/smaps in the check_huge_xxx() helpers with
/proc/self/pagemap and /proc/kpageflags.

This patch based on v7.2

---
Yeoreum Yun (2):
kselftest: mm: prevent random failure of huge page split for khugepaged
kselftest: mm: replace usage of /proc/self/smaps for check_huge_xxx() helper

tools/testing/selftests/mm/khugepaged.c | 26 ++---
tools/testing/selftests/mm/split_huge_page_test.c | 17 ++-
tools/testing/selftests/mm/vm_util.c | 135 ++++++++++++++++++----
tools/testing/selftests/mm/vm_util.h | 1 +
4 files changed, 142 insertions(+), 37 deletions(-)
---
base-commit: 8d3ae59288f1e7d58d76558a6ee96d533bc5019f
change-id: 20260820-fix_split-f44939ec44b8

Best regards,
--
Sincerely,
Yeoreum Yun