| From cf3bbccb6b41a56baed531c4edb3159155480783 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 11 Mar 2021 13:32:16 +0100 |
| Subject: ARM: 9069/1: NOMMU: Fix conversion for_each_membock() to |
| for_each_mem_range() |
| |
| From: Vladimir Murzin <vladimir.murzin@arm.com> |
| |
| [ Upstream commit 45c2f70cba3a7eff34574103b2e2b901a5f771aa ] |
| |
| 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: b10d6bca8720 ("arch, drivers: replace for_each_membock() with for_each_mem_range()") |
| Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com> |
| Acked-by: Mike Rapoport <rppt@linux.ibm.com> |
| Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/arm/mm/pmsa-v7.c | 4 +++- |
| arch/arm/mm/pmsa-v8.c | 4 +++- |
| 2 files changed, 6 insertions(+), 2 deletions(-) |
| |
| diff --git a/arch/arm/mm/pmsa-v7.c b/arch/arm/mm/pmsa-v7.c |
| index 88950e41a3a9..59d916ccdf25 100644 |
| --- a/arch/arm/mm/pmsa-v7.c |
| +++ b/arch/arm/mm/pmsa-v7.c |
| @@ -235,6 +235,7 @@ void __init pmsav7_adjust_lowmem_bounds(void) |
| phys_addr_t mem_end; |
| phys_addr_t reg_start, reg_end; |
| unsigned int mem_max_regions; |
| + bool first = true; |
| int num; |
| u64 i; |
| |
| @@ -263,7 +264,7 @@ void __init pmsav7_adjust_lowmem_bounds(void) |
| #endif |
| |
| for_each_mem_range(i, ®_start, ®_end) { |
| - if (i == 0) { |
| + if (first) { |
| phys_addr_t phys_offset = PHYS_OFFSET; |
| |
| /* |
| @@ -275,6 +276,7 @@ void __init pmsav7_adjust_lowmem_bounds(void) |
| mem_start = reg_start; |
| mem_end = reg_end; |
| specified_mem_size = mem_end - mem_start; |
| + first = false; |
| } else { |
| /* |
| * memblock auto merges contiguous blocks, remove |
| diff --git a/arch/arm/mm/pmsa-v8.c b/arch/arm/mm/pmsa-v8.c |
| index 2de019f7503e..8359748a19a1 100644 |
| --- a/arch/arm/mm/pmsa-v8.c |
| +++ b/arch/arm/mm/pmsa-v8.c |
| @@ -95,10 +95,11 @@ void __init pmsav8_adjust_lowmem_bounds(void) |
| { |
| phys_addr_t mem_end; |
| phys_addr_t reg_start, reg_end; |
| + bool first = true; |
| u64 i; |
| |
| for_each_mem_range(i, ®_start, ®_end) { |
| - if (i == 0) { |
| + if (first) { |
| phys_addr_t phys_offset = PHYS_OFFSET; |
| |
| /* |
| @@ -107,6 +108,7 @@ void __init pmsav8_adjust_lowmem_bounds(void) |
| if (reg_start != phys_offset) |
| panic("First memory bank must be contiguous from PHYS_OFFSET"); |
| mem_end = reg_end; |
| + first = false; |
| } else { |
| /* |
| * memblock auto merges contiguous blocks, remove |
| -- |
| 2.30.2 |
| |