Re: [PATCH v4 3/4] mm: huge_memory: refactor enabled_store() with change_enabled()

From: David Hildenbrand (Arm)

Date: Mon Mar 09 2026 - 09:47:09 EST


On 3/9/26 12:07, Breno Leitao wrote:
> Refactor enabled_store() to use a new change_enabled() helper.
> Introduce a separate enum global_enabled_mode and
> global_enabled_mode_strings[], mirroring the anon_enabled_mode
> pattern from the previous commit.
>
> A separate enum is necessary because the global THP setting does
> not support "inherit", only "always", "madvise", and "never".
> Reusing anon_enabled_mode would leave a NULL gap in the string
> array, causing sysfs_match_string() to stop early and fail to
> match entries after the gap.
>
> The helper uses the same loop pattern as change_anon_orders(),
> iterating over an array of flag bit positions and using
> test_and_set_bit()/test_and_clear_bit() to track whether the state
> actually changed.
>
> Signed-off-by: Breno Leitao <leitao@xxxxxxxxxx>
> Reviewed-by: Lorenzo Stoakes (Oracle) <ljs@xxxxxxxxxx>
> ---
> mm/huge_memory.c | 63 ++++++++++++++++++++++++++++++++++++++++++--------------
> 1 file changed, 48 insertions(+), 15 deletions(-)
>
> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> index 2d5b05a416dab..be42a28da31d8 100644
> --- a/mm/huge_memory.c
> +++ b/mm/huge_memory.c
> @@ -330,30 +330,63 @@ static const char * const anon_enabled_mode_strings[] = {
> [ANON_ENABLED_NEVER] = "never",
> };
>
> +enum global_enabled_mode {
> + GLOBAL_ENABLED_ALWAYS = 0,
> + GLOBAL_ENABLED_MADVISE = 1,
> + GLOBAL_ENABLED_NEVER = 2,
> +};
> +
> +static const char * const global_enabled_mode_strings[] = {
> + [GLOBAL_ENABLED_ALWAYS] = "always",
> + [GLOBAL_ENABLED_MADVISE] = "madvise",
> + [GLOBAL_ENABLED_NEVER] = "never",
> +};
> +
> +static bool change_enabled(enum global_enabled_mode mode)

I'd similarly call this something like "set_global_enabled_mode"


--
Cheers,

David