On Sun, Apr 05, 2026 at 08:52:02PM +0800, Muchun Song wrote: > According to the comment of free_area_init(), its main goal is to > initialise all pg_data_t and zone data. However, sparse_init() and > memmap_init() are aimed at allocating vmemmap pages and initializing > struct page respectively, which differs from the goal of free_area_init(). > Therefore, it is reasonable to move them out of free_area_init(). > > Call sparse_init() after free_area_init() to guarantee that zone data > structures are available when sparse_init() executes. This change is a > prerequisite for integrating vmemmap initialization steps and allows > sparse_init() to safely access zone information if needed (e.g. HVO case). > > Also, move hugetlb reservation functions (hugetlb_cma_reserve() and > hugetlb_bootmem_alloc()) to be after free_area_init(). This allows > hugetlb reservation to access zone information to ensure that contiguous > pages are not allocated across zone boundaries, which simplifies the > hugetlb code. So this is a preparation for subsequent changes. > > Signed-off-by: Muchun Song <[email protected]> > --- > mm/mm_init.c | 15 ++++++++------- > mm/sparse.c | 3 --- > 2 files changed, 8 insertions(+), 10 deletions(-) > > diff --git a/mm/sparse.c b/mm/sparse.c > index c7f91dc2e5b5..5fe0a7e66775 100644 > --- a/mm/sparse.c > +++ b/mm/sparse.c > @@ -406,9 +406,6 @@ void __init sparse_init(void) > pnum_begin = first_present_section_nr(); > nid_begin = sparse_early_nid(__nr_to_section(pnum_begin)); > > - /* Setup pageblock_order for HUGETLB_PAGE_SIZE_VARIABLE */ > - set_pageblock_order(); > -
This does not seem related to this patch. Otherwise Reviewed-by: Mike Rapoport (Microsoft) <[email protected]> > for_each_present_section_nr(pnum_begin + 1, pnum_end) { > int nid = sparse_early_nid(__nr_to_section(pnum_end)); > > -- > 2.20.1 > -- Sincerely yours, Mike.
