mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-30 14:33:24 -04:00
mm/mm_init: defer sparse_init() until after zone initialization
free_area_init() is responsible for initializing pgdat and zone state. Calling sparse_init() from there mixes in later vmemmap and struct page setup, which makes the initialization flow less clear. Defer sparse_init(), sparse_vmemmap_init_nid_late(), and memmap_init() until after free_area_init() completes, when zone initialization is fully done. This keeps free_area_init() focused on zone setup and ensures that sparse_init() runs with the relevant zone state already available. This is also a prerequisite for later hugetlb vmemmap changes that need zone information during early sparse vmemmap setup. Link: https://lore.kernel.org/20260612035903.2468601-9-songmuchun@bytedance.com Signed-off-by: Muchun Song <songmuchun@bytedance.com> Reviewed-by: Mike Rapoport (Microsoft) <rppt@kernel.org> Reviewed-by: Oscar Salvador (SUSE) <osalvador@kernel.org> Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com> Cc: David Hildenbrand <david@kernel.org> Cc: Frank van der Linden <fvdl@google.com> Cc: Liam R. Howlett <liam@infradead.org> Cc: Lorenzo Stoakes <ljs@kernel.org> Cc: Madhavan Srinivasan <maddy@linux.ibm.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Nicholas Piggin <npiggin@gmail.com> Cc: Oscar Salvador <osalvador@suse.de> Cc: "Ritesh Harjani (IBM)" <ritesh.list@gmail.com> Cc: Usama Arif <usama.arif@linux.dev> Cc: Vlastimil Babka <vbabka@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
8e4ee7b1bd
commit
ee6192a2c4
12
mm/mm_init.c
12
mm/mm_init.c
@@ -1821,7 +1821,6 @@ static void __init free_area_init(void)
|
||||
bool descending;
|
||||
|
||||
arch_zone_limits_init(max_zone_pfn);
|
||||
sparse_init();
|
||||
|
||||
start_pfn = PHYS_PFN(memblock_start_of_DRAM());
|
||||
descending = arch_has_descending_max_zone_pfns();
|
||||
@@ -1910,11 +1909,7 @@ static void __init free_area_init(void)
|
||||
}
|
||||
}
|
||||
|
||||
for_each_node_state(nid, N_MEMORY)
|
||||
sparse_vmemmap_init_nid_late(nid);
|
||||
|
||||
calc_nr_kernel_pages();
|
||||
memmap_init();
|
||||
|
||||
/* disable hash distribution for systems with a single node */
|
||||
fixup_hashdist();
|
||||
@@ -2686,10 +2681,17 @@ void __init __weak mem_init(void)
|
||||
|
||||
void __init mm_core_init_early(void)
|
||||
{
|
||||
int nid;
|
||||
|
||||
hugetlb_cma_reserve();
|
||||
hugetlb_bootmem_alloc();
|
||||
|
||||
free_area_init();
|
||||
|
||||
sparse_init();
|
||||
for_each_node_state(nid, N_MEMORY)
|
||||
sparse_vmemmap_init_nid_late(nid);
|
||||
memmap_init();
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user