mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] mm: Remove unused exact_nid parameter from memmap_alloc()
@ 2026-09-14  5:51 Kaitao Cheng
  2026-09-14  6:33 ` Muchun Song
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Kaitao Cheng @ 2026-09-14  5:51 UTC (permalink / raw)
  To: Mike Rapoport, Andrew Morton, David Hildenbrand, Lorenzo Stoakes,
	Liam R . Howlett, Vlastimil Babka, Suren Baghdasaryan,
	Michal Hocko, Muchun Song
  Cc: linux-mm, linux-kernel, Kaitao Cheng

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);
-	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)


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] mm: Remove unused exact_nid parameter from memmap_alloc()
  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:46 ` Lorenzo Stoakes (ARM)
  2 siblings, 0 replies; 5+ messages in thread
From: Muchun Song @ 2026-09-14  6:33 UTC (permalink / raw)
  To: Kaitao Cheng
  Cc: Mike Rapoport, Andrew Morton, David Hildenbrand, Lorenzo Stoakes,
	Liam R . Howlett, Vlastimil Babka, Suren Baghdasaryan,
	Michal Hocko, linux-mm, linux-kernel, Kaitao Cheng



> On Sep 14, 2026, at 13:51, Kaitao Cheng <kaitao.cheng@linux.dev> 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>

Acked-by: Muchun Song <muchun.song@linux.dev>

Thanks.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] mm: Remove unused exact_nid parameter from memmap_alloc()
  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)
  2 siblings, 1 reply; 5+ messages in thread
From: Andrew Morton @ 2026-09-15  4:22 UTC (permalink / raw)
  To: Kaitao Cheng
  Cc: Mike Rapoport, David Hildenbrand, Lorenzo Stoakes,
	Liam R . Howlett, Vlastimil Babka, Suren Baghdasaryan,
	Michal Hocko, Muchun Song, linux-mm, linux-kernel, Kaitao Cheng

On Mon, 14 Sep 2026 13:51:30 +0800 Kaitao Cheng <kaitao.cheng@linux.dev> 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.
> 

Latest development code has changed quite lot, but this was an easy reject
to fix:

> --- 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)


--- a/mm/sparse.c~mm-remove-unused-exact_nid-parameter-from-memmap_alloc
+++ a/mm/sparse.c
@@ -215,7 +215,7 @@ struct page __init *__populate_section_m
 {
 	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 */
 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] mm: Remove unused exact_nid parameter from memmap_alloc()
  2026-09-15  4:22 ` Andrew Morton
@ 2026-09-15  8:09   ` Kaitao Cheng
  0 siblings, 0 replies; 5+ messages in thread
From: Kaitao Cheng @ 2026-09-15  8:09 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Mike Rapoport, David Hildenbrand, Lorenzo Stoakes,
	Liam R . Howlett, Vlastimil Babka, Suren Baghdasaryan,
	Michal Hocko, Muchun Song, linux-mm, linux-kernel, Kaitao Cheng



在 2026/9/15 12:22, Andrew Morton 写道:
> On Mon, 14 Sep 2026 13:51:30 +0800 Kaitao Cheng <kaitao.cheng@linux.dev> 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.
>>
> 
> Latest development code has changed quite lot, but this was an easy reject
> to fix:

Thank you very much for helping me fix this issue!

> 
>> --- 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)
> 
> 
> --- a/mm/sparse.c~mm-remove-unused-exact_nid-parameter-from-memmap_alloc
> +++ a/mm/sparse.c
> @@ -215,7 +215,7 @@ struct page __init *__populate_section_m
>  {
>  	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 */
>  
> 

-- 
Thanks
Kaitao Cheng


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] mm: Remove unused exact_nid parameter from memmap_alloc()
  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:46 ` Lorenzo Stoakes (ARM)
  2 siblings, 0 replies; 5+ messages in thread
From: Lorenzo Stoakes (ARM) @ 2026-09-15  8:46 UTC (permalink / raw)
  To: Kaitao Cheng
  Cc: Mike Rapoport, Andrew Morton, David Hildenbrand,
	Liam R . Howlett, Vlastimil Babka, Suren Baghdasaryan,
	Michal Hocko, Muchun Song, linux-mm, linux-kernel, Kaitao Cheng

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

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-09-15  8:47 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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 is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®