[PATCH v3 11/19] mm/sparse: Move sparse_vmemmap_init_nid_late() into sparse_init_nid()

From: Muchun Song

Date: Tue Jun 02 2026 - 06:33:28 EST


sparse_vmemmap_init_nid_late() is still called separately from
mm_core_init_early(), away from the rest of the sparse initialization
path.

Now that sparse_init() runs after zone initialization, call
sparse_vmemmap_init_nid_late() from sparse_init_nid() instead. This
keeps both sparse_vmemmap_init_nid_early() and
sparse_vmemmap_init_nid_late() in the sparse setup path.

Signed-off-by: Muchun Song <songmuchun@xxxxxxxxxxxxx>
Reviewed-by: Mike Rapoport (Microsoft) <rppt@xxxxxxxxxx>
Reviewed-by: Oscar Salvador (SUSE) <osalvador@xxxxxxxxxx>
---
v2->v3:
- collect Reviewed-by from Oscar Salvador
---
mm/mm_init.c | 4 ----
mm/sparse.c | 1 +
2 files changed, 1 insertion(+), 4 deletions(-)

diff --git a/mm/mm_init.c b/mm/mm_init.c
index 44512f3b3544..41b83dd18c01 100644
--- a/mm/mm_init.c
+++ b/mm/mm_init.c
@@ -2689,16 +2689,12 @@ void __init __weak mem_init(void)

void __init mm_core_init_early(void)
{
- int nid;
-
free_area_init();

hugetlb_cma_reserve();
hugetlb_bootmem_alloc();

sparse_init();
- for_each_node_state(nid, N_MEMORY)
- sparse_vmemmap_init_nid_late(nid);
memmap_init();
}

diff --git a/mm/sparse.c b/mm/sparse.c
index 324213d8bdcb..3917a47153d8 100644
--- a/mm/sparse.c
+++ b/mm/sparse.c
@@ -320,6 +320,7 @@ static void __init sparse_init_nid(int nid, unsigned long pnum_begin,
}
}
sparse_usage_fini();
+ sparse_vmemmap_init_nid_late(nid);
}

/*
--
2.54.0