kselftest-mm-prevent-random-failure-of-huge-page-split-for-khugepaged.patch removed from -mm tree
The quilt patch titled
Subject: kselftest: mm: prevent random failure of huge page split for khugepaged
has been removed from the -mm tree. Its filename was
kselftest-mm-prevent-random-failure-of-huge-page-split-for-khugepaged.patch
This patch was dropped because it was merged into the mm-stable branch of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: Yeoreum Yun <[email protected]>
Subject: kselftest: mm: prevent random failure of huge page split for khugepaged
Date: Thu, 01 Oct 2026 22:17:51 +0100
Patch series "kselftest: mm: fix some failure of split_huge_page_test", v9.
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 instead of relying on /proc/self/smaps, use /proc/self/pagemap and /proc/kpageflags to detect huge-page mappings and large folios:
1. If hpage_size == pmd_pagesize, check PAGE_IS_HUGE instead of using check_large_folios(), since only the mapping type matters. This identifies PMD-mapped huge pages.
2. Otherwise, use check_large_folios() to detect large folios. This covers mTHP cases.
3. Check the folio flags according to the type of huge page.
Since 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.
This patch (of 4):
There're some random failure for split_huge_page_test when khugepaged collapses pages into pmd again which had split by the test.
Prevent the khugepaged's collapses for split page by setting the mapped pmd-huge-page with MADV_NOHUGEPAGE before split.
---
tools/testing/selftests/mm/split_huge_page_test.c | 16 ++++++++++++ 1 file changed, 16 insertions(+)
tools/testing/selftests/mm/split_huge_page_test.c renamed from tools/testing/selftests/mm/split_huge_page_test.c~kselftest-mm-prevent-random-failure-of-huge-page-split-for-khugepaged +16 -0
@@ -108,6 +108,15 @@ static char *allocate_zero_filled_hugepareturn result; } +static void disable_khugepaged (void *addr,size_t len) +{ +/* Disables khugepaged from collapsing pages in range into THPs */ +if (!madvise (addr, len,MADV_NOHUGEPAGE )) +return ; + +ksft_exit_fail_perror ("MADV_NOHUGEPAGE failed" ); +} +static void verify_rss_anon_split_huge_page_all_zeroes (char *one_page,int nr_hpages,size_t len) {unsigned long rss_anon_before, rss_anon_after;
@@ -120,6 +129,8 @@ static void verify_rss_anon_split_huge_pif (!rss_anon_before)ksft_exit_fail_msg ("No RssAnon is allocated before split\n" ); +disable_khugepaged (one_page, len); +/* split all THPs */ write_debugfs (PID_FMT ,getpid (), (uint64_t )one_page, (uint64_t )one_page + len,0 );
@@ -167,6 +178,8 @@ static void split_pmd_thp_to_order(int oif (!check_huge_anon (one_page,4 * pmd_pagesize,4 , pmd_pagesize))ksft_exit_fail_msg ("No THP is allocated\n" ); +disable_khugepaged (one_page, len); +/* split all THPs */ write_debugfs (PID_FMT ,getpid (), (uint64_t )one_page, (uint64_t )one_page + len, order);
@@ -215,6 +228,8 @@ static void split_pte_mapped_thp(void) goto out; } +disable_khugepaged (thp_area, thp_area_size); +/* * To challenge spitting code, we will mremap a single page of each * THP (page[i] of thp[i]) in the thp_area into page_area. This will
@@ -482,6 +497,7 @@ static int create_pagecache_thp_and_fd(cksft_test_result_skip ("Pagecache folio split skipped\n" );return -2 ; } +disable_khugepaged (*addr, fd_size);return 0 ; err_out_close:close (*fd);
_
Patches currently in -mm which might be from [email protected] are