From f113e6e04efbe1910726162c717f9abc1022d88c Mon Sep 17 00:00:00 2001 From: Xiaoguang Xing Date: Wed, 18 Oct 2023 09:28:09 +0800 Subject: [PATCH] mm: memblock: Fix find_max_low_addr() bug for multi-chip Signed-off-by: Xiaoguang Xing --- mm/memblock.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mm/memblock.c b/mm/memblock.c index 52208feea8a6..ef2541c269a9 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -1698,16 +1698,18 @@ static phys_addr_t __init_memblock __find_max_addr(phys_addr_t limit) phys_addr_t __init_memblock find_max_low_addr(phys_addr_t limit) { phys_addr_t max_low_addr = PHYS_ADDR_MAX; - phys_addr_t phys_ram_base = 0; + phys_addr_t max_low_addr_limit; struct memblock_region *r; - phys_ram_base = memblock_start_of_DRAM(); + max_low_addr_limit = memblock_start_of_DRAM() + limit; for_each_mem_region(r) { - if ((r->base+r->size) <= (phys_ram_base+limit)) + if ((r->base+r->size) <= max_low_addr_limit) max_low_addr = r->base + r->size; + else if (r->base < max_low_addr_limit) + max_low_addr = max_low_addr_limit; else - max_low_addr = phys_ram_base+limit; + continue; } return max_low_addr;