All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Lorenzo Stoakes (ARM)" <ljs@kernel.org>
To: Kaitao Cheng <kaitao.cheng@linux.dev>
Cc: Mike Rapoport <rppt@kernel.org>,
	 Andrew Morton <akpm@linux-foundation.org>,
	David Hildenbrand <david@kernel.org>,
	 "Liam R . Howlett" <liam@infradead.org>,
	Vlastimil Babka <vbabka@kernel.org>,
	 Suren Baghdasaryan <surenb@google.com>,
	Michal Hocko <mhocko@suse.com>,
	 Muchun Song <muchun.song@linux.dev>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	 Kaitao Cheng <chengkaitao@kylinos.cn>
Subject: Re: [PATCH] mm: Remove unused exact_nid parameter from memmap_alloc()
Date: Tue, 15 Sep 2026 09:46:58 +0100	[thread overview]
Message-ID: <aqkE4DhNFWIzgHHo@gremlin> (raw)
In-Reply-To: <20260914055130.44543-1-kaitao.cheng@linux.dev>

On Mon, Sep 14, 2026 at 01:51:30PM +0800, Kaitao Cheng wrote:
> From: Kaitao Cheng <chengkaitao@kylinos.cn>
>
> Commit ffe55393137c ("mm/sparse: remove sparse buffer pre-allocation
> mechanism") removed sparse_buffer_init(), which was the only caller of
> memmap_alloc() that passed true for exact_nid.
>
> All remaining callers pass false, leaving the exact-node allocation
> branch unreachable. Remove the exact_nid parameter and unconditionally
> use memblock_alloc_try_nid_raw().
>
> This has no functional impact.
>
> Signed-off-by: Kaitao Cheng <chengkaitao@kylinos.cn>
> ---
>  mm/mm_init.c        | 14 ++++----------
>  mm/mm_init.h        |  4 ++--
>  mm/sparse-vmemmap.c |  2 +-
>  mm/sparse.c         |  2 +-
>  4 files changed, 8 insertions(+), 14 deletions(-)
>
> diff --git a/mm/mm_init.c b/mm/mm_init.c
> index beeeed4688c1..6af5cabf3e75 100644
> --- a/mm/mm_init.c
> +++ b/mm/mm_init.c
> @@ -1601,7 +1601,7 @@ static void __init free_area_init_core(struct pglist_data *pgdat)
>  }
>
>  void __init *memmap_alloc(phys_addr_t size, phys_addr_t align,
> -			  phys_addr_t min_addr, int nid, bool exact_nid)
> +			  phys_addr_t min_addr, int nid)
>  {
>  	void *ptr;
>
> @@ -1609,14 +1609,8 @@ void __init *memmap_alloc(phys_addr_t size, phys_addr_t align,
>  	 * Kmemleak will explicitly scan mem_map by traversing all valid
>  	 * `struct *page`,so memblock does not need to be added to the scan list.
>  	 */
> -	if (exact_nid)
> -		ptr = memblock_alloc_exact_nid_raw(size, align, min_addr,
> -						   MEMBLOCK_ALLOC_NOLEAKTRACE,
> -						   nid);

I don't see anything else _in the kernel_ reference
memblock_alloc_exact_nid_raw(), though I do see some stuff in
tools/testing/memblock/tests/alloc_exact_nid_api.c.

So I suggest removing memblock_alloc_exact_nid_raw() and
tools/testing/memblock/tests/alloc_exact_nid_api.c (and updating the testing to
account for it as necessary) too.

Also I see both memblock_alloc_try_nid_raw(), memblock_alloc_exact_nid_raw() and
memblock_alloc_try_nid() call memblock_alloc_internal() with an exact_nid last
parameter too.

Only memblock_alloc_exact_nid_raw(), which you should delete, passes this
parameter as true, so you should drop this parameter too.

AND THEN :) it passes exact_nid to memblock_alloc_range_nid() and... I leave it
to you to go investigate if that ever has exact_nid=true passed there.

Let's clean this up all the way please!

> -	else
> -		ptr = memblock_alloc_try_nid_raw(size, align, min_addr,
> -						 MEMBLOCK_ALLOC_NOLEAKTRACE,
> -						 nid);
> +	ptr = memblock_alloc_try_nid_raw(size, align, min_addr,
> +					 MEMBLOCK_ALLOC_NOLEAKTRACE, nid);
>
>  	if (ptr && size > 0)
>  		page_init_poison(ptr, size);
> @@ -1644,7 +1638,7 @@ static void __init alloc_node_mem_map(struct pglist_data *pgdat)
>  	end = ALIGN(pgdat_end_pfn(pgdat), MAX_ORDER_NR_PAGES);
>  	size =  (end - start) * sizeof(struct page);
>  	map = memmap_alloc(size, SMP_CACHE_BYTES, MEMBLOCK_LOW_LIMIT,
> -			   pgdat->node_id, false);
> +			   pgdat->node_id);
>  	if (!map)
>  		panic("Failed to allocate %ld bytes for node %d memory map\n",
>  		      size, pgdat->node_id);
> diff --git a/mm/mm_init.h b/mm/mm_init.h
> index c9fc35e7e9f1..a8ed5c20851b 100644
> --- a/mm/mm_init.h
> +++ b/mm/mm_init.h
> @@ -31,8 +31,8 @@ static inline void clear_zone_contiguous(struct zone *zone)
>
>  void memblock_free_pages(unsigned long pfn, unsigned int order);
>
> -void *memmap_alloc(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr,
> -		int nid, bool exact_nid);
> +void *memmap_alloc(phys_addr_t size, phys_addr_t align,
> +		   phys_addr_t min_addr, int nid);
>
>  void memmap_init_range(unsigned long size, int nid, unsigned long zone,
>  		unsigned long start_pfn, unsigned long zone_end_pfn,
> diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c
> index f22d815d7af0..c2fa5fbf0972 100644
> --- a/mm/sparse-vmemmap.c
> +++ b/mm/sparse-vmemmap.c
> @@ -53,7 +53,7 @@ static void * __ref __earlyonly_bootmem_alloc(int node,
>  				unsigned long align,
>  				unsigned long goal)
>  {
> -	return memmap_alloc(size, align, goal, node, false);
> +	return memmap_alloc(size, align, goal, node);
>  }
>
>  void * __meminit vmemmap_alloc_block(unsigned long size, int node)
> diff --git a/mm/sparse.c b/mm/sparse.c
> index cc28bb41fdb1..f032c98b92d9 100644
> --- a/mm/sparse.c
> +++ b/mm/sparse.c
> @@ -215,7 +215,7 @@ struct page __init *__populate_section_memmap(unsigned long pfn,
>  {
>  	const unsigned long size = PAGE_ALIGN(sizeof(struct page) * PAGES_PER_SECTION);
>
> -	return memmap_alloc(size, size, __pa(MAX_DMA_ADDRESS), nid, false);
> +	return memmap_alloc(size, size, __pa(MAX_DMA_ADDRESS), nid);
>  }
>  #endif /* !CONFIG_SPARSEMEM_VMEMMAP */
>
> --
> 2.54.0 (Apple Git-157)
>

--
Cheers, Lorenzo


      parent reply	other threads:[~2026-09-15  8:47 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-14  5:51 [PATCH] mm: Remove unused exact_nid parameter from memmap_alloc() Kaitao Cheng
2026-09-14  6:33 ` Muchun Song
2026-09-15  4:22 ` Andrew Morton
2026-09-15  8:09   ` Kaitao Cheng
2026-09-15  8:46 ` Lorenzo Stoakes (ARM) [this message]

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=aqkE4DhNFWIzgHHo@gremlin \
    --to=ljs@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=chengkaitao@kylinos.cn \
    --cc=david@kernel.org \
    --cc=kaitao.cheng@linux.dev \
    --cc=liam@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@suse.com \
    --cc=muchun.song@linux.dev \
    --cc=rppt@kernel.org \
    --cc=surenb@google.com \
    --cc=vbabka@kernel.org \
    /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.