[PATCH] mm/page_alloc: simplify lowmem_reserve max calculation

Ye Liu posted 1 patch 1 month, 3 weeks ago
There is a newer version of this series
mm/page_alloc.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
[PATCH] mm/page_alloc: simplify lowmem_reserve max calculation
Posted by Ye Liu 1 month, 3 weeks ago
From: Ye Liu <liuye@kylinos.cn>

Use max() macro to simplify the calculation of maximum lowmem_reserve
value in calculate_totalreserve_pages(), instead of open-coding the
comparison. The functionality remains identical.

Signed-off-by: Ye Liu <liuye@kylinos.cn>
---
 mm/page_alloc.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 64872214bc7d..8a55a4951d19 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -6236,8 +6236,7 @@ static void calculate_totalreserve_pages(void)
 
 			/* Find valid and maximum lowmem_reserve in the zone */
 			for (j = i; j < MAX_NR_ZONES; j++) {
-				if (zone->lowmem_reserve[j] > max)
-					max = zone->lowmem_reserve[j];
+				max = max(max, zone->lowmem_reserve[j]);
 			}
 
 			/* we treat the high watermark as reserved pages. */
-- 
2.43.0
Re: [PATCH] mm/page_alloc: simplify lowmem_reserve max calculation
Posted by Zi Yan 1 month, 3 weeks ago
On 14 Aug 2025, at 5:00, Ye Liu wrote:

> From: Ye Liu <liuye@kylinos.cn>
>
> Use max() macro to simplify the calculation of maximum lowmem_reserve
> value in calculate_totalreserve_pages(), instead of open-coding the
> comparison. The functionality remains identical.
>
> Signed-off-by: Ye Liu <liuye@kylinos.cn>
> ---
>  mm/page_alloc.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index 64872214bc7d..8a55a4951d19 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -6236,8 +6236,7 @@ static void calculate_totalreserve_pages(void)
>
>  			/* Find valid and maximum lowmem_reserve in the zone */
>  			for (j = i; j < MAX_NR_ZONES; j++) {
> -				if (zone->lowmem_reserve[j] > max)
> -					max = zone->lowmem_reserve[j];
> +				max = max(max, zone->lowmem_reserve[j]);
>  			}

There is a “if (max > managed_pages)” below. Maybe convert that as well?

Feel free to add Acked-by: Zi Yan <ziy@nvidia.com>.

Best Regards,
Yan, Zi
Re: [PATCH] mm/page_alloc: simplify lowmem_reserve max calculation
Posted by Ye Liu 1 month, 2 weeks ago

在 2025/8/14 22:47, Zi Yan 写道:
> On 14 Aug 2025, at 5:00, Ye Liu wrote:
> 
>> From: Ye Liu <liuye@kylinos.cn>
>>
>> Use max() macro to simplify the calculation of maximum lowmem_reserve
>> value in calculate_totalreserve_pages(), instead of open-coding the
>> comparison. The functionality remains identical.
>>
>> Signed-off-by: Ye Liu <liuye@kylinos.cn>
>> ---
>>  mm/page_alloc.c | 3 +--
>>  1 file changed, 1 insertion(+), 2 deletions(-)
>>
>> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
>> index 64872214bc7d..8a55a4951d19 100644
>> --- a/mm/page_alloc.c
>> +++ b/mm/page_alloc.c
>> @@ -6236,8 +6236,7 @@ static void calculate_totalreserve_pages(void)
>>
>>  			/* Find valid and maximum lowmem_reserve in the zone */
>>  			for (j = i; j < MAX_NR_ZONES; j++) {
>> -				if (zone->lowmem_reserve[j] > max)
>> -					max = zone->lowmem_reserve[j];
>> +				max = max(max, zone->lowmem_reserve[j]);
>>  			}
> 
> There is a “if (max > managed_pages)” below. Maybe convert that as well?

I should use min() here, but I noticed the two variables have different types: 
one is 'long' and the other is 'unsigned long'. So, I should use min_t(). 
But then again, why is lowmem_reserve of type 'long'? 
It should be a non-negative number, right? 
Is it possible to change the type of lowmem_reserve to 'unsigned long' and 
change all uses of it at the same time? Is it necessary?

> 
> Feel free to add Acked-by: Zi Yan <ziy@nvidia.com>.
> 
> Best Regards,
> Yan, Zi

-- 
Thanks,
Ye Liu

Re: [PATCH] mm/page_alloc: simplify lowmem_reserve max calculation
Posted by Zi Yan 1 month, 2 weeks ago
On 14 Aug 2025, at 21:38, Ye Liu wrote:

> 在 2025/8/14 22:47, Zi Yan 写道:
>> On 14 Aug 2025, at 5:00, Ye Liu wrote:
>>
>>> From: Ye Liu <liuye@kylinos.cn>
>>>
>>> Use max() macro to simplify the calculation of maximum lowmem_reserve
>>> value in calculate_totalreserve_pages(), instead of open-coding the
>>> comparison. The functionality remains identical.
>>>
>>> Signed-off-by: Ye Liu <liuye@kylinos.cn>
>>> ---
>>>  mm/page_alloc.c | 3 +--
>>>  1 file changed, 1 insertion(+), 2 deletions(-)
>>>
>>> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
>>> index 64872214bc7d..8a55a4951d19 100644
>>> --- a/mm/page_alloc.c
>>> +++ b/mm/page_alloc.c
>>> @@ -6236,8 +6236,7 @@ static void calculate_totalreserve_pages(void)
>>>
>>>  			/* Find valid and maximum lowmem_reserve in the zone */
>>>  			for (j = i; j < MAX_NR_ZONES; j++) {
>>> -				if (zone->lowmem_reserve[j] > max)
>>> -					max = zone->lowmem_reserve[j];
>>> +				max = max(max, zone->lowmem_reserve[j]);
>>>  			}
>>
>> There is a “if (max > managed_pages)” below. Maybe convert that as well?
>
> I should use min() here, but I noticed the two variables have different types:
> one is 'long' and the other is 'unsigned long'. So, I should use min_t().
> But then again, why is lowmem_reserve of type 'long'?

Based on commit 3484b2de9499 ("mm: rearrange zone fields into read-only, page
alloc, statistics and page reclaim lines”), lowmem_reserve type is changed
due to the watermark calculation. Looking at current __zone_watermark_ok(),
the comment above free_pages -= ... says free_pages may go negative and
later free_pages is compared with lowmem_reserve.

> It should be a non-negative number, right?
> Is it possible to change the type of lowmem_reserve to 'unsigned long' and
> change all uses of it at the same time? Is it necessary?

In calculate_totalreserve_pages(), max cannot be negative, so you
probably can use min_t(unsigned long, max, managed_pages) and without
changing lowmem_reserve type.


>
>>
>> Feel free to add Acked-by: Zi Yan <ziy@nvidia.com>.
>>
>> Best Regards,
>> Yan, Zi
>
> -- 
> Thanks,
> Ye Liu


Best Regards,
Yan, Zi
Re: [PATCH] mm/page_alloc: simplify lowmem_reserve max calculation
Posted by Johannes Weiner 1 month, 3 weeks ago
On Thu, Aug 14, 2025 at 05:00:52PM +0800, Ye Liu wrote:
> From: Ye Liu <liuye@kylinos.cn>
> 
> Use max() macro to simplify the calculation of maximum lowmem_reserve
> value in calculate_totalreserve_pages(), instead of open-coding the
> comparison. The functionality remains identical.
> 
> Signed-off-by: Ye Liu <liuye@kylinos.cn>

You can remove the {} from the for block as well now.

Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Re: [PATCH] mm/page_alloc: simplify lowmem_reserve max calculation
Posted by Ye Liu 1 month, 2 weeks ago

在 2025/8/14 22:07, Johannes Weiner 写道:
> On Thu, Aug 14, 2025 at 05:00:52PM +0800, Ye Liu wrote:
>> From: Ye Liu <liuye@kylinos.cn>
>>
>> Use max() macro to simplify the calculation of maximum lowmem_reserve
>> value in calculate_totalreserve_pages(), instead of open-coding the
>> comparison. The functionality remains identical.
>>
>> Signed-off-by: Ye Liu <liuye@kylinos.cn>
> 
> You can remove the {} from the for block as well now.

I agree to delete it, but I noticed a patch has been added to the -mm 
mm-new branch by Andrew Morton[1]. What should I do now? Send v2 ? 
Or send a new patch? If this is my first time, please feel free to give me some advice.
[1]:https://lore.kernel.org/all/20250815004917.03FD7C4CEED@smtp.kernel.org/
> 
> Acked-by: Johannes Weiner <hannes@cmpxchg.org>

-- 
Thanks,
Ye Liu

Re: [PATCH] mm/page_alloc: simplify lowmem_reserve max calculation
Posted by Zi Yan 1 month, 2 weeks ago
On 14 Aug 2025, at 21:59, Ye Liu wrote:

> 在 2025/8/14 22:07, Johannes Weiner 写道:
>> On Thu, Aug 14, 2025 at 05:00:52PM +0800, Ye Liu wrote:
>>> From: Ye Liu <liuye@kylinos.cn>
>>>
>>> Use max() macro to simplify the calculation of maximum lowmem_reserve
>>> value in calculate_totalreserve_pages(), instead of open-coding the
>>> comparison. The functionality remains identical.
>>>
>>> Signed-off-by: Ye Liu <liuye@kylinos.cn>
>>
>> You can remove the {} from the for block as well now.
>
> I agree to delete it, but I noticed a patch has been added to the -mm
> mm-new branch by Andrew Morton[1]. What should I do now? Send v2 ?
> Or send a new patch? If this is my first time, please feel free to give me some advice.
> [1]:https://lore.kernel.org/all/20250815004917.03FD7C4CEED@smtp.kernel.org/

If you read the message carefully, you will see:

“Please do not hesitate to respond to
review feedback and post updated versions to replace or incrementally
fixup patches in mm-new.”

So feel free to send v2.


Best Regards,
Yan, Zi