[2/2] mm/mm_init.c: do not calculate memmap and reserved pages for empty zone

Message ID 20230601063536.26882-2-haifeng.xu@shopee.com
State New
Headers
Series [1/2] mm/mm_init.c: move set_pageblock_order() to free_area_init() |

Commit Message

Haifeng Xu June 1, 2023, 6:35 a.m. UTC
  For empty zone, it's unnecessary to account for pages used by memmap.
Also, the pages reserved in dma zone can be ignored.

Signed-off-by: Haifeng Xu <haifeng.xu@shopee.com>
---
 mm/mm_init.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)
  

Comments

Mike Rapoport June 1, 2023, 4:35 p.m. UTC | #1
On Thu, Jun 01, 2023 at 06:35:36AM +0000, Haifeng Xu wrote:
> For empty zone, it's unnecessary to account for pages used by memmap.
> Also, the pages reserved in dma zone can be ignored.
> 
> Signed-off-by: Haifeng Xu <haifeng.xu@shopee.com>
> ---
>  mm/mm_init.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/mm/mm_init.c b/mm/mm_init.c
> index 232efac9a929..b82718d596c3 100644
> --- a/mm/mm_init.c
> +++ b/mm/mm_init.c
> @@ -1543,6 +1543,13 @@ static void __init free_area_init_core(struct pglist_data *pgdat)
>  		size = zone->spanned_pages;
>  		freesize = zone->present_pages;
>  
> +		if (!size) {
> +			nr_kernel_pages += 0;
> +			nr_all_pages += 0;

Please drop these, they are nops anyway.

> +			zone_init_internals(zone, j, nid, 0);
> +			continue;
> +		}
> +
>  		/*
>  		 * Adjust freesize so that it accounts for how much memory
>  		 * is used by this zone for memmap. This affects the watermark
> @@ -1579,10 +1586,6 @@ static void __init free_area_init_core(struct pglist_data *pgdat)
>  		 * And all highmem pages will be managed by the buddy system.
>  		 */
>  		zone_init_internals(zone, j, nid, freesize);
> -
> -		if (!size)
> -			continue;
> -
>  		setup_usemap(zone);
>  		init_currently_empty_zone(zone, zone->zone_start_pfn, size);
>  	}
> -- 
> 2.25.1
>
  

Patch

diff --git a/mm/mm_init.c b/mm/mm_init.c
index 232efac9a929..b82718d596c3 100644
--- a/mm/mm_init.c
+++ b/mm/mm_init.c
@@ -1543,6 +1543,13 @@  static void __init free_area_init_core(struct pglist_data *pgdat)
 		size = zone->spanned_pages;
 		freesize = zone->present_pages;
 
+		if (!size) {
+			nr_kernel_pages += 0;
+			nr_all_pages += 0;
+			zone_init_internals(zone, j, nid, 0);
+			continue;
+		}
+
 		/*
 		 * Adjust freesize so that it accounts for how much memory
 		 * is used by this zone for memmap. This affects the watermark
@@ -1579,10 +1586,6 @@  static void __init free_area_init_core(struct pglist_data *pgdat)
 		 * And all highmem pages will be managed by the buddy system.
 		 */
 		zone_init_internals(zone, j, nid, freesize);
-
-		if (!size)
-			continue;
-
 		setup_usemap(zone);
 		init_currently_empty_zone(zone, zone->zone_start_pfn, size);
 	}