* [PATCH] selftests/mm: skip collapse_compound_extreme() on THP allocation failure
@ 2026-10-28 10:01 Zenghui Yu
2026-10-28 12:51 ` Kiryl Shutsemau
0 siblings, 1 reply; 2+ messages in thread
From: Zenghui Yu @ 2026-10-28 10:01 UTC (permalink / raw)
To: linux-mm, linux-kselftest, linux-kernel
Cc: akpm, david, ziy, baolin.wang, liam, nico.pache, ryan.roberts,
dev.jain, baohua, lance.yang, usama.arif, kas, ljs, vbabka, rppt,
surenb, mhocko, Zenghui Yu (Huawei),
Kiryl Shutsemau
From: "Zenghui Yu (Huawei)" <zenghui.yu@linux.dev>
collapse_compound_extreme() needs hpage_pmd_nr PMD-order allocations in a
row, and it kills the whole test binary via ksft_exit_fail_msg() as soon as
one of them fails.
Gating the case by PMD size (commit b36bec6a01b1) -- the current workaround
for arm64 with 64K base pages, where a 512M PMD makes every construction
step an order-13 allocation -- is not enough: the case still dies below the
cutoff, e.g. on an arm64 VM with 16K base pages and 8G of RAM, where the
construction would need ~64G worth of PMD-order allocations.
Remove the PMD-size gating and treat a failure to allocate a huge page
during the construction as a skip: whether the allocator can hand out
that many PMD-order folios in a row depends on the memory available on
the machine, not on the kernel.
Suggested-by: Kiryl Shutsemau <kirill@shutemov.name>
Link: https://lore.kernel.org/all/atiQmWnz8zx2AKI7@thinkstation
Signed-off-by: Zenghui Yu (Huawei) <zenghui.yu@linux.dev>
---
tools/testing/selftests/mm/khugepaged.c | 26 +++++++++++++------------
1 file changed, 14 insertions(+), 12 deletions(-)
diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/selftests/mm/khugepaged.c
index 1bc7acc66a46..e6151732b17c 100644
--- a/tools/testing/selftests/mm/khugepaged.c
+++ b/tools/testing/selftests/mm/khugepaged.c
@@ -953,23 +953,25 @@ static void collapse_compound_extreme(struct collapse_context *c, struct mem_ops
void *p;
int i;
- /*
- * This needs hpage_pmd_nr PMD-order allocations in a row, which the
- * allocator will not supply if the PMD is very large.
- */
- if (hpage_pmd_size > (32UL << 20)) {
- ksft_test_result_skip("%s: PMD too large for fault-time THP construction\n",
- __func__);
- return;
- }
-
p = ops->setup_area(1);
ksft_print_msg("Construct PTE page table full of different PTE-mapped compound pages\n");
for (i = 0; i < hpage_pmd_nr; i++) {
madvise(BASE_ADDR, hpage_pmd_size, MADV_HUGEPAGE);
ops->fault(BASE_ADDR, 0, hpage_pmd_size);
- if (!ops->check_huge(BASE_ADDR, hpage_pmd_size, 1, hpage_pmd_size))
- ksft_exit_fail_msg("Failed to allocate huge page\n");
+ if (!ops->check_huge(BASE_ADDR, hpage_pmd_size, 1, hpage_pmd_size)) {
+ /*
+ * Constructing the PTE table requires hpage_pmd_nr
+ * PMD-order allocations in a row. Whether the
+ * allocator can supply them depends on the memory
+ * available on the machine, not on the kernel: skip
+ * instead of failing the test run.
+ */
+ ops->cleanup_area(BASE_ADDR - i * page_size,
+ i * page_size + hpage_pmd_size);
+ ksft_test_result_skip("%s: Failed to allocate huge page\n",
+ __func__);
+ return;
+ }
madvise(BASE_ADDR, hpage_pmd_size, MADV_NOHUGEPAGE);
p = mremap(BASE_ADDR - i * page_size,
--
2.56.0
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: [PATCH] selftests/mm: skip collapse_compound_extreme() on THP allocation failure
2026-10-28 10:01 [PATCH] selftests/mm: skip collapse_compound_extreme() on THP allocation failure Zenghui Yu
@ 2026-10-28 12:51 ` Kiryl Shutsemau
0 siblings, 0 replies; 2+ messages in thread
From: Kiryl Shutsemau @ 2026-10-28 12:51 UTC (permalink / raw)
To: Zenghui Yu
Cc: linux-mm, linux-kselftest, linux-kernel, akpm, david, ziy,
baolin.wang, liam, nico.pache, ryan.roberts, dev.jain, baohua,
lance.yang, usama.arif, ljs, vbabka, rppt, surenb, mhocko
On Wed, Oct 28, 2026 at 06:01:19PM +0800, Zenghui Yu wrote:
> From: "Zenghui Yu (Huawei)" <zenghui.yu@linux.dev>
>
> collapse_compound_extreme() needs hpage_pmd_nr PMD-order allocations in a
> row, and it kills the whole test binary via ksft_exit_fail_msg() as soon as
> one of them fails.
>
> Gating the case by PMD size (commit b36bec6a01b1) -- the current workaround
Nit: checkpatch wants the full form:
commit b36bec6a01b1 ("selftests/mm: skip collapse_compound_extreme() where the PMD is too large")
Otherwise looks good. Thanks for chasing it.
Reviewed-by: Kiryl Shutsemau (Meta) <kas@kernel.org>
--
Kiryl Shutsemau / Kirill A. Shutemov
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-10-28 12:51 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-28 10:01 [PATCH] selftests/mm: skip collapse_compound_extreme() on THP allocation failure Zenghui Yu
2026-10-28 12:51 ` Kiryl Shutsemau
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®