Re: [PATCH mm-unstable v3 3/5] mm/khugepaged: define KHUGEPAGED_MAX_PTES_LIMIT as HPAGE_PMD_NR - 1

From: Nico Pache

Date: Wed Mar 18 2026 - 13:08:13 EST




On 3/16/26 12:18 PM, Lorenzo Stoakes (Oracle) wrote:
> On Wed, Mar 11, 2026 at 03:13:13PM -0600, Nico Pache wrote:
>> The value (HPAGE_PMD_NR - 1) is used often in the khugepaged code to
>> signify the limit of the max_ptes_* values. Add a define for this to
>> increase code readability and reuse.
>>
>> Acked-by: Pedro Falcato <pfalcato@xxxxxxx>
>> Acked-by: David Hildenbrand (Arm) <david@xxxxxxxxxx>
>> Reviewed-by: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx>
>> Reviewed-by: Zi Yan <ziy@xxxxxxxxxx>
>> Signed-off-by: Nico Pache <npache@xxxxxxxxxx>
>
> Hm didn't I suggest this? Or actually I can't remember :P

I think you suggested most of these patches ;P Ill make sure to add your SB tag
on the followups!

>
> Anyway LGTM, so:
>
> Reviewed-by: Lorenzo Stoakes (Oracle) <ljs@xxxxxxxxxx>

Thank you!

>
>> ---
>> mm/khugepaged.c | 9 +++++----
>> 1 file changed, 5 insertions(+), 4 deletions(-)
>>
>> diff --git a/mm/khugepaged.c b/mm/khugepaged.c
>> index d3bdec4ec61b..db77ab5b315e 100644
>> --- a/mm/khugepaged.c
>> +++ b/mm/khugepaged.c
>> @@ -89,6 +89,7 @@ static DECLARE_WAIT_QUEUE_HEAD(khugepaged_wait);
>> *
>> * Note that these are only respected if collapse was initiated by khugepaged.
>> */
>> +#define KHUGEPAGED_MAX_PTES_LIMIT (HPAGE_PMD_NR - 1)
>> unsigned int khugepaged_max_ptes_none __read_mostly;
>> static unsigned int khugepaged_max_ptes_swap __read_mostly;
>> static unsigned int khugepaged_max_ptes_shared __read_mostly;
>> @@ -259,7 +260,7 @@ static ssize_t max_ptes_none_store(struct kobject *kobj,
>> unsigned long max_ptes_none;
>>
>> err = kstrtoul(buf, 10, &max_ptes_none);
>> - if (err || max_ptes_none > HPAGE_PMD_NR - 1)
>> + if (err || max_ptes_none > KHUGEPAGED_MAX_PTES_LIMIT)
>> return -EINVAL;
>>
>> khugepaged_max_ptes_none = max_ptes_none;
>> @@ -284,7 +285,7 @@ static ssize_t max_ptes_swap_store(struct kobject *kobj,
>> unsigned long max_ptes_swap;
>>
>> err = kstrtoul(buf, 10, &max_ptes_swap);
>> - if (err || max_ptes_swap > HPAGE_PMD_NR - 1)
>> + if (err || max_ptes_swap > KHUGEPAGED_MAX_PTES_LIMIT)
>> return -EINVAL;
>>
>> khugepaged_max_ptes_swap = max_ptes_swap;
>> @@ -310,7 +311,7 @@ static ssize_t max_ptes_shared_store(struct kobject *kobj,
>> unsigned long max_ptes_shared;
>>
>> err = kstrtoul(buf, 10, &max_ptes_shared);
>> - if (err || max_ptes_shared > HPAGE_PMD_NR - 1)
>> + if (err || max_ptes_shared > KHUGEPAGED_MAX_PTES_LIMIT)
>> return -EINVAL;
>>
>> khugepaged_max_ptes_shared = max_ptes_shared;
>> @@ -382,7 +383,7 @@ int __init khugepaged_init(void)
>> return -ENOMEM;
>>
>> khugepaged_pages_to_scan = HPAGE_PMD_NR * 8;
>> - khugepaged_max_ptes_none = HPAGE_PMD_NR - 1;
>> + khugepaged_max_ptes_none = KHUGEPAGED_MAX_PTES_LIMIT;
>> khugepaged_max_ptes_swap = HPAGE_PMD_NR / 8;
>> khugepaged_max_ptes_shared = HPAGE_PMD_NR / 2;
>>
>> --
>> 2.53.0
>>
>