> collapse_compound_extreme builds a PTE table full of distinct PTE-mapped
Nit: we usually add brakets to function names :) > compound pages by cycling hpage_pmd_nr fault-time THPs through mremap. It > therefore needs hpage_pmd_nr PMD-order allocations in a row. That is fine > at a 2M PMD (4K base pages) or a 32M one (16K), but a 512M PMD -- arm64 > with 64K base pages -- makes each of those an order-13 allocation, which > the allocator cannot reliably hand out even once, let alone 8192 times. > > The failure is not a quiet one: the case calls ksft_exit_fail_msg(), so the > whole binary stops and every case after it is lost. > > Skip the case where the PMD is larger than 32M. The MADV_COLLAPSE cases > still cover PMD-order collapse on those configurations, and 4K and 16K > PMDs are unaffected. > > Assisted-by: Claude-Code:claude-opus-5 > Tested-by: Muhammad Usama Anjum <[email protected]> > Signed-off-by: Kiryl Shutsemau (Meta) <[email protected]> > > diff --git a/tools/testing/selftests/mm/khugepaged.c > b/tools/testing/selftests/mm/khugepaged.c > index 018b0698229c..48eb74c255f6 100644 > --- a/tools/testing/selftests/mm/khugepaged.c > +++ b/tools/testing/selftests/mm/khugepaged.c > @@ -974,6 +974,16 @@ static void collapse_compound_extreme(struct > collapse_context *c, struct mem_ops > void *p; > int i; > > + /* > + * The test needs hpage_pmd_nr PMD-order allocations, which is likely to > + * fail for large PMD sizes. Skip if the PMD size is over 32M. > + */ > + 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++) { Reviewed-by: Mike Rapoport (Microsoft) <[email protected]> -- Sincerely yours, Mike.

