Re: [PATCH v4 06/19] selftests/mm: stop khugepaged during the MADV_COLLAPSE cases

"Lorenzo Stoakes (ARM)" <[email protected]>
Newsgroups org.kvack.linux-mm,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.