Re: [PATCH v4 06/19] selftests/mm: stop khugepaged during the MADV_COLLAPSE cases
"Lorenzo Stoakes (ARM)" <[email protected]>
| Newsgroups | gmane.linux.kernel,gmane.linux.kernel.mm |
|---|---|
| Message-ID | <aoQvybFWhSkWe1o_@lucifer> |
On Sat, Aug 15, 2026 at 02:58:48AM +0100, Kiryl Shutsemau wrote: > From: "Kiryl Shutsemau (Meta)" <[email protected]> > > __madvise_collapse() turns THP off before each MADV_COLLAPSE, both to keep > khugepaged out of the range and to prove MADV_COLLAPSE ignores the setting. > It clears the global controls only, which is no longer enough. A per-order > control overrides them, and -s leaves the source order at "always", so > khugepaged collapses the very range the case is working on. The case then > fails on a collapse that was interfered with rather than refused. > > Clear the per-order controls too. Set them to "inherit", not "never". > khugepaged honours the global never and stays out. A forced shmem collapse > takes the order it builds from these very controls, and still finds one. > > Fixes: 9f0704eae8a4 ("selftests/mm/khugepaged: enlighten for multi-size THP") > Assisted-by: Claude-Code:claude-opus-5 > Signed-off-by: Kiryl Shutsemau (Meta) <[email protected]> > --- > tools/testing/selftests/mm/khugepaged.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/selftests/mm/khugepaged.c > index 7eb9db0005a0..0008862e7cbc 100644 > --- a/tools/testing/selftests/mm/khugepaged.c > +++ b/tools/testing/selftests/mm/khugepaged.c > @@ -550,8 +550,8 @@ static bool is_anon(struct mem_ops *ops) > static void __madvise_collapse(const char *msg, char *p, int nr_hpages, > struct mem_ops *ops, bool expect) > { > - int ret; > struct thp_settings settings = *thp_current_settings(); > + int ret, i; > > ksft_print_msg("%s...", msg); > > @@ -564,9 +564,20 @@ static void __madvise_collapse(const char *msg, char *p, int nr_hpages, > /* > * Prevent khugepaged interference and tests that MADV_COLLAPSE > * ignores /sys/kernel/mm/transparent_hugepage/enabled > + * > + * The per-order controls have to go too, not just the global one: a > + * source order left at "always" -- which -s does -- lets khugepaged > + * collapse the very range the case is working on. Set them to > + * "inherit", not "never". khugepaged honours the global never and > + * stays out. A forced shmem collapse takes the order it builds from > + * these very controls, and still finds one. Again far too many words, schloppy. Trim it please. This isn't a chat with claude it's a comment. > */ > settings.thp_enabled = THP_NEVER; > settings.shmem_enabled = SHMEM_NEVER; > + for (i = 0; i < NR_ORDERS; i++) { > + settings.hugepages[i].enabled = THP_INHERIT; > + settings.shmem_hugepages[i].enabled = SHMEM_INHERIT; > + } > thp_push_settings(&settings); > > /* Clear VM_NOHUGEPAGE */ > -- > 2.54.0 > -- Cheers, Lorenzo