lkml.org 
[lkml]   [2020]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 410/477] arm64: mm: reserve hugetlb CMA after numa_init
    Date
    From: Barry Song <song.bao.hua@hisilicon.com>

    [ Upstream commit 618e07865b7453d02410c1f3407c2d78a670eabb ]

    hugetlb_cma_reserve() is called at the wrong place. numa_init has not been
    done yet. so all reserved memory will be located at node0.

    Fixes: cf11e85fc08c ("mm: hugetlb: optionally allocate gigantic hugepages using cma")
    Signed-off-by: Barry Song <song.bao.hua@hisilicon.com>
    Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
    Acked-by: Roman Gushchin <guro@fb.com>
    Cc: Matthias Brugger <matthias.bgg@gmail.com>
    Cc: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20200617215828.25296-1-song.bao.hua@hisilicon.com
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/arm64/mm/init.c | 15 ++++++++++-----
    1 file changed, 10 insertions(+), 5 deletions(-)

    diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
    index e42727e3568ea..3f90101674687 100644
    --- a/arch/arm64/mm/init.c
    +++ b/arch/arm64/mm/init.c
    @@ -458,11 +458,6 @@ void __init arm64_memblock_init(void)
    high_memory = __va(memblock_end_of_DRAM() - 1) + 1;

    dma_contiguous_reserve(arm64_dma32_phys_limit);
    -
    -#ifdef CONFIG_ARM64_4K_PAGES
    - hugetlb_cma_reserve(PUD_SHIFT - PAGE_SHIFT);
    -#endif
    -
    }

    void __init bootmem_init(void)
    @@ -478,6 +473,16 @@ void __init bootmem_init(void)
    min_low_pfn = min;

    arm64_numa_init();
    +
    + /*
    + * must be done after arm64_numa_init() which calls numa_init() to
    + * initialize node_online_map that gets used in hugetlb_cma_reserve()
    + * while allocating required CMA size across online nodes.
    + */
    +#ifdef CONFIG_ARM64_4K_PAGES
    + hugetlb_cma_reserve(PUD_SHIFT - PAGE_SHIFT);
    +#endif
    +
    /*
    * Sparsemem tries to allocate bootmem in memory_present(), so must be
    * done after the fixed reservations.
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-23 22:18    [W:4.245 / U:0.532 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site