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

Reply via email to