mm: memblock: Fix find_max_low_addr() bug for multi-chip

Signed-off-by: Xiaoguang Xing <xiaoguang.xing@sophgo.com>
This commit is contained in:
Xiaoguang Xing 2023-10-18 09:28:09 +08:00
parent 69e3faab4a
commit f113e6e04e
1 changed files with 6 additions and 4 deletions

View File

@ -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;