hugetlb_cma_reserve() and hugetlb_bootmem_alloc() currently run before
free_area_init(), so HugeTLB reservation happens before zone state is
initialized.

Move the reservation step after free_area_init() so the relevant zone
information is available before HugeTLB reserves memory. This is needed
for later hugetlb changes that validate boot-time HugeTLB reservations
against zone boundaries.

Signed-off-by: Muchun Song <[email protected]>
---
 mm/mm_init.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/mm/mm_init.c b/mm/mm_init.c
index c14491c2dad3..75f98abfed97 100644
--- a/mm/mm_init.c
+++ b/mm/mm_init.c
@@ -2688,11 +2688,11 @@ void __init mm_core_init_early(void)
 {
        int nid;
 
+       free_area_init();
+
        hugetlb_cma_reserve();
        hugetlb_bootmem_alloc();
 
-       free_area_init();
-
        sparse_init();
        for_each_node_state(nid, N_MEMORY)
                sparse_vmemmap_init_nid_late(nid);
-- 
2.54.0


Reply via email to