Commit 45c2f70c authored by Vladimir Murzin's avatar Vladimir Murzin Committed by Russell King

ARM: 9069/1: NOMMU: Fix conversion for_each_membock() to for_each_mem_range()

for_each_mem_range() uses a loop variable, yet looking into code it is
not just iteration counter but more complex entity which encodes
information about memblock. Thus condition i == 0 looks fragile.
Indeed, it broke boot of R-class platforms since it never took i == 0
path (due to i was set to 1). Fix that with restoring original flag
check.

Fixes: b10d6bca ("arch, drivers: replace for_each_membock() with for_each_mem_range()")
Signed-off-by: default avatarVladimir Murzin <vladimir.murzin@arm.com>
Acked-by: default avatarMike Rapoport <rppt@linux.ibm.com>
Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
parent d624833f
...@@ -235,6 +235,7 @@ void __init pmsav7_adjust_lowmem_bounds(void) ...@@ -235,6 +235,7 @@ void __init pmsav7_adjust_lowmem_bounds(void)
phys_addr_t mem_end; phys_addr_t mem_end;
phys_addr_t reg_start, reg_end; phys_addr_t reg_start, reg_end;
unsigned int mem_max_regions; unsigned int mem_max_regions;
bool first = true;
int num; int num;
u64 i; u64 i;
...@@ -263,7 +264,7 @@ void __init pmsav7_adjust_lowmem_bounds(void) ...@@ -263,7 +264,7 @@ void __init pmsav7_adjust_lowmem_bounds(void)
#endif #endif
for_each_mem_range(i, &reg_start, &reg_end) { for_each_mem_range(i, &reg_start, &reg_end) {
if (i == 0) { if (first) {
phys_addr_t phys_offset = PHYS_OFFSET; phys_addr_t phys_offset = PHYS_OFFSET;
/* /*
...@@ -275,6 +276,7 @@ void __init pmsav7_adjust_lowmem_bounds(void) ...@@ -275,6 +276,7 @@ void __init pmsav7_adjust_lowmem_bounds(void)
mem_start = reg_start; mem_start = reg_start;
mem_end = reg_end; mem_end = reg_end;
specified_mem_size = mem_end - mem_start; specified_mem_size = mem_end - mem_start;
first = false;
} else { } else {
/* /*
* memblock auto merges contiguous blocks, remove * memblock auto merges contiguous blocks, remove
......
...@@ -95,10 +95,11 @@ void __init pmsav8_adjust_lowmem_bounds(void) ...@@ -95,10 +95,11 @@ void __init pmsav8_adjust_lowmem_bounds(void)
{ {
phys_addr_t mem_end; phys_addr_t mem_end;
phys_addr_t reg_start, reg_end; phys_addr_t reg_start, reg_end;
bool first = true;
u64 i; u64 i;
for_each_mem_range(i, &reg_start, &reg_end) { for_each_mem_range(i, &reg_start, &reg_end) {
if (i == 0) { if (first) {
phys_addr_t phys_offset = PHYS_OFFSET; phys_addr_t phys_offset = PHYS_OFFSET;
/* /*
...@@ -107,6 +108,7 @@ void __init pmsav8_adjust_lowmem_bounds(void) ...@@ -107,6 +108,7 @@ void __init pmsav8_adjust_lowmem_bounds(void)
if (reg_start != phys_offset) if (reg_start != phys_offset)
panic("First memory bank must be contiguous from PHYS_OFFSET"); panic("First memory bank must be contiguous from PHYS_OFFSET");
mem_end = reg_end; mem_end = reg_end;
first = false;
} else { } else {
/* /*
* memblock auto merges contiguous blocks, remove * memblock auto merges contiguous blocks, remove
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment