All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Rapoport <rppt@kernel.org>
To: Yuan Liu <yuan1.liu@intel.com>
Cc: David Hildenbrand <david@kernel.org>,
	Oscar Salvador <osalvador@suse.de>,
	Wei Yang <richard.weiyang@gmail.com>,
	linux-mm@kvack.org, Yong Hu <yong.hu@intel.com>,
	Nanhai Zou <nanhai.zou@intel.com>,
	Tim Chen <tim.c.chen@linux.intel.com>,
	Qiuxu Zhuo <qiuxu.zhuo@intel.com>,
	Yu C Chen <yu.c.chen@intel.com>, Pan Deng <pan.deng@intel.com>,
	Tianyou Li <tianyou.li@intel.com>,
	Chen Zhang <zhangchen.kidd@jd.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 1/2] mm: move overlap memory map init check to memmap_init()
Date: Sat, 25 Apr 2026 11:01:42 +0200	[thread overview]
Message-ID: <aeyC9i2TziSzY8_Z@kernel.org> (raw)
In-Reply-To: <20260421125508.2317429-2-yuan1.liu@intel.com>

Hi,

On Tue, Apr 21, 2026 at 08:55:07AM -0400, Yuan Liu wrote:
> Move the overlap memmap init check from memmap_init_range() into
> memmap_init().
> 
> When mirrored kernelcore is enabled, avoid memory map initialization
> for overlap regions. There are two cases that may overlap: a mirror
> memory region assigned to movable zone, or a non-mirror memory region
> assigned to a non-movable zone but falling within the movable zone
> range.
> 
> Signed-off-by: Yuan Liu <yuan1.liu@intel.com>
> ---
>  mm/mm_init.c | 37 +++++++++++++------------------------
>  1 file changed, 13 insertions(+), 24 deletions(-)
> 
> diff --git a/mm/mm_init.c b/mm/mm_init.c
> index df34797691bd..2b5233060504 100644
> --- a/mm/mm_init.c
> +++ b/mm/mm_init.c
> @@ -797,28 +797,6 @@ void __meminit reserve_bootmem_region(phys_addr_t start,
>  	}
>  }
>  
> -/* If zone is ZONE_MOVABLE but memory is mirrored, it is an overlapped init */
> -static bool __meminit
> -overlap_memmap_init(unsigned long zone, unsigned long *pfn)
> -{
> -	static struct memblock_region *r;
> -
> -	if (mirrored_kernelcore && zone == ZONE_MOVABLE) {
> -		if (!r || *pfn >= memblock_region_memory_end_pfn(r)) {
> -			for_each_mem_region(r) {
> -				if (*pfn < memblock_region_memory_end_pfn(r))
> -					break;
> -			}
> -		}
> -		if (*pfn >= memblock_region_memory_base_pfn(r) &&
> -		    memblock_is_mirror(r)) {
> -			*pfn = memblock_region_memory_end_pfn(r);
> -			return true;
> -		}
> -	}
> -	return false;
> -}
> -
>  /*
>   * Only struct pages that correspond to ranges defined by memblock.memory
>   * are zeroed and initialized by going through __init_single_page() during
> @@ -905,8 +883,6 @@ void __meminit memmap_init_range(unsigned long size, int nid, unsigned long zone
>  		 * function.  They do not exist on hotplugged memory.
>  		 */
>  		if (context == MEMINIT_EARLY) {
> -			if (overlap_memmap_init(zone, &pfn))
> -				continue;
>  			if (defer_init(nid, pfn, zone_end_pfn)) {
>  				deferred_struct_pages = true;
>  				break;
> @@ -971,6 +947,7 @@ static void __init memmap_init(void)
>  
>  	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, &nid) {
>  		struct pglist_data *node = NODE_DATA(nid);
> +		struct memblock_region *r = &memblock.memory.regions[i];

Please move this declaration above struct pglist_data, let's keep reverse
xmas tree where possible.
>  
>  		for (j = 0; j < MAX_NR_ZONES; j++) {
>  			struct zone *zone = node->node_zones + j;
> @@ -978,6 +955,18 @@ static void __init memmap_init(void)
>  			if (!populated_zone(zone))
>  				continue;
>  
> +			if (mirrored_kernelcore) {
> +				const bool is_mirror = memblock_is_mirror(r);
> +				const bool is_movable_zone = (j == ZONE_MOVABLE);
> +
> +				if (is_mirror && is_movable_zone)
> +					continue;
> +
> +				if (!is_mirror && !is_movable_zone &&
> +				    start_pfn >= zone_movable_pfn[nid])
> +					continue;
> +			}
> +

I think this:

			if (mirrored_kernelcore && j == ZONE_MOVABLE &&
			    memblock_is_mirror(r))
				continue;

would be enough to remove overlap_memmap_init() and keep the existing
logic.

I wouldn't deal the theoretical cases Wei mentioned in this thread for
now and prefer to keep the things simple. 
The assumptions that mirrored memory spans a contiguous range below some
limit and that mirrored memory is not removable existed for years and I
don't see why we should change the logic now and complicate the code for
exotic theoretical memory layouts.

>  			memmap_init_zone_range(zone, start_pfn, end_pfn,
>  					       &hole_pfn);
>  			zone_id = j;
> -- 
> 2.47.3
> 

-- 
Sincerely yours,
Mike.


  parent reply	other threads:[~2026-04-25  9:01 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-21 12:55 [PATCH v4 0/2] mm/memory hotplug/unplug: Optimize zone contiguous check when changing pfn range Yuan Liu
2026-04-21 12:55 ` [PATCH v4 1/2] mm: move overlap memory map init check to memmap_init() Yuan Liu
2026-04-22  1:11   ` Wei Yang
2026-04-22  3:26     ` Wei Yang
2026-04-22  9:28       ` Liu, Yuan1
2026-04-24  1:05         ` Wei Yang
2026-04-24  7:49           ` Liu, Yuan1
2026-04-22  7:08     ` Liu, Yuan1
2026-04-25  9:01   ` Mike Rapoport [this message]
2026-04-26  4:00     ` Wei Yang
2026-04-27  0:31     ` Liu, Yuan1
2026-04-21 12:55 ` [PATCH v4 2/2] mm/memory hotplug/unplug: Optimize zone contiguous check when changing pfn range Yuan Liu
2026-04-22  7:46 ` [PATCH v4 0/2] " David Hildenbrand (Arm)
2026-04-22  7:56   ` Liu, Yuan1
2026-04-22 19:13     ` David Hildenbrand (Arm)
2026-04-23  3:17       ` Liu, Yuan1

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aeyC9i2TziSzY8_Z@kernel.org \
    --to=rppt@kernel.org \
    --cc=david@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=nanhai.zou@intel.com \
    --cc=osalvador@suse.de \
    --cc=pan.deng@intel.com \
    --cc=qiuxu.zhuo@intel.com \
    --cc=richard.weiyang@gmail.com \
    --cc=tianyou.li@intel.com \
    --cc=tim.c.chen@linux.intel.com \
    --cc=yong.hu@intel.com \
    --cc=yu.c.chen@intel.com \
    --cc=yuan1.liu@intel.com \
    --cc=zhangchen.kidd@jd.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.