Re: [PATCH v5 2/4] mm: huge_memory: refactor anon_enabled_store() with change_anon_orders()

Lance Yang
2026-03-11T04:52:25Z

On 2026/3/11 11:12, Wei Yang wrote:
> On Tue, Mar 10, 2026 at 10:57:08AM -0700, Breno Leitao wrote:
>> Consolidate the repeated spin_lock/set_bit/clear_bit pattern in
>> anon_enabled_store() into a new change_anon_orders() helper that
>> loops over an orders[] array, setting the bit for the selected mode
>> and clearing the others.
>>
>> Introduce enum anon_enabled_mode and anon_enabled_mode_strings[]
>> for the per-order anon THP setting.
>>
>> Use sysfs_match_string() with the anon_enabled_mode_strings[] table
>> to replace the if/else chain of sysfs_streq() calls.
>>
>> The helper uses test_and_set_bit()/test_and_clear_bit() to track
>> whether the state actually changed, so start_stop_khugepaged() is
>> only called when needed. When the mode is unchanged,
>> set_recommended_min_free_kbytes() is called directly to preserve
>> the watermark recalculation behavior of the original code.
>>
>> Signed-off-by: Breno Leitao <leitao@debian.org>
>> Reviewed-by: Lorenzo Stoakes (Oracle) <ljs@kernel.org>
>> ---
>> mm/huge_memory.c | 84 +++++++++++++++++++++++++++++++++++---------------------
>> 1 file changed, 52 insertions(+), 32 deletions(-)
>>
>> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
>> index 8e2746ea74adf..e19dda5aaf195 100644
>> --- a/mm/huge_memory.c
>> +++ b/mm/huge_memory.c
>> @@ -316,6 +316,20 @@ static ssize_t enabled_show(struct kobject *kobj,
>> return sysfs_emit(buf, "%s\n", output);
>> }
>>
>> +enum anon_enabled_mode {
>> + ANON_ENABLED_ALWAYS = 0,
>> + ANON_ENABLED_MADVISE = 1,
>> + ANON_ENABLED_INHERIT = 2,
>> + ANON_ENABLED_NEVER = 3,
>> +};
>> +
>> +static const char * const anon_enabled_mode_strings[] = {
>> + [ANON_ENABLED_ALWAYS] = "always",
>> + [ANON_ENABLED_MADVISE] = "madvise",
>> + [ANON_ENABLED_INHERIT] = "inherit",
>> + [ANON_ENABLED_NEVER] = "never",
>> +};
>> +
>
> Just one trivial thing, maybe keep the sequence as the sysfs output?
>
> Currently the output of /sys/kernel/transparent_hugepage/hugepages-xxxkB is
>
> always inherit madvise [never]
>
> But no strong opinion on this.

Yeah, keeping the enum order consistent with the sysfs output looks
sensible :)

Apart from that, LGTM.

Reviewed-by: Lance Yang <lance.yang@linux.dev>