diff mbox series

arm64: mm: Fix ARCH_LOW_ADDRESS_LIMIT when !CONFIG_ZONE_DMA

Message ID 20201218163307.10150-1-nsaenzjulienne@suse.de (mailing list archive)
State New, archived
Headers show
Series arm64: mm: Fix ARCH_LOW_ADDRESS_LIMIT when !CONFIG_ZONE_DMA | expand

Commit Message

Nicolas Saenz Julienne Dec. 18, 2020, 4:33 p.m. UTC
Systems configured with CONFIG_ZONE_DMA32, CONFIG_ZONE_NORMAL and
!CONFIG_ZONE_DMA will fail to properly setup ARCH_LOW_ADDRESS_LIMIT. The
limit will default to ~0ULL, effectively spanning the whole memory,
which is too high for a configuration that expects low memory to be
capped at 4GB.

Fix ARCH_LOW_ADDRESS_LIMIT by falling back to arm64_dma32_phys_limit
when arm64_dma_phys_limit isn't set. arm64_dma32_phys_limit will honour
CONFIG_ZONE_DMA32, or span the entire memory when not enabled.

Fixes: 1a8e1cef7603 ("arm64: use both ZONE_DMA and ZONE_DMA32")
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
 arch/arm64/include/asm/processor.h | 3 ++-
 arch/arm64/mm/init.c               | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

Comments

Catalin Marinas Jan. 4, 2021, 11:49 a.m. UTC | #1
On Fri, 18 Dec 2020 17:33:07 +0100, Nicolas Saenz Julienne wrote:
> Systems configured with CONFIG_ZONE_DMA32, CONFIG_ZONE_NORMAL and
> !CONFIG_ZONE_DMA will fail to properly setup ARCH_LOW_ADDRESS_LIMIT. The
> limit will default to ~0ULL, effectively spanning the whole memory,
> which is too high for a configuration that expects low memory to be
> capped at 4GB.
> 
> Fix ARCH_LOW_ADDRESS_LIMIT by falling back to arm64_dma32_phys_limit
> when arm64_dma_phys_limit isn't set. arm64_dma32_phys_limit will honour
> CONFIG_ZONE_DMA32, or span the entire memory when not enabled.

Applied to arm64 (for-next/fixes), thanks!

[1/1] arm64: mm: Fix ARCH_LOW_ADDRESS_LIMIT when !CONFIG_ZONE_DMA
      https://git.kernel.org/arm64/c/095507dc1350
diff mbox series

Patch

diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h
index ca2cd75d3286..69ad25fbeae4 100644
--- a/arch/arm64/include/asm/processor.h
+++ b/arch/arm64/include/asm/processor.h
@@ -94,7 +94,8 @@ 
 #endif /* CONFIG_ARM64_FORCE_52BIT */
 
 extern phys_addr_t arm64_dma_phys_limit;
-#define ARCH_LOW_ADDRESS_LIMIT	(arm64_dma_phys_limit - 1)
+extern phys_addr_t arm64_dma32_phys_limit;
+#define ARCH_LOW_ADDRESS_LIMIT	((arm64_dma_phys_limit ? : arm64_dma32_phys_limit) - 1)
 
 struct debug_info {
 #ifdef CONFIG_HAVE_HW_BREAKPOINT
diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
index 75addb36354a..7deddf56f7c3 100644
--- a/arch/arm64/mm/init.c
+++ b/arch/arm64/mm/init.c
@@ -59,7 +59,7 @@  EXPORT_SYMBOL(memstart_addr);
  * bit addressable memory area.
  */
 phys_addr_t arm64_dma_phys_limit __ro_after_init;
-static phys_addr_t arm64_dma32_phys_limit __ro_after_init;
+phys_addr_t arm64_dma32_phys_limit __ro_after_init;
 
 #ifdef CONFIG_KEXEC_CORE
 /*