diff mbox series

[v2] RISC-V: Fix Maximum Physical Memory 2GiB option for 64bit systems

Message ID 20190402091741.11298-1-anup.patel@wdc.com (mailing list archive)
State New, archived
Headers show
Series [v2] RISC-V: Fix Maximum Physical Memory 2GiB option for 64bit systems | expand

Commit Message

Anup Patel April 2, 2019, 9:18 a.m. UTC
The Maximum Physical Memory 2GiB option for 64bit systems is currently
broken because kernel hangs at boot-time when this option is enabled
and the underlying system has more than 2GiB memory.

This issue can be easily reproduced on SiFive Unleashed board where
we have 8GiB of memory.

This patch fixes above issue by removing unusable memory region in
setup_bootmem().

Signed-off-by: Anup Patel <anup.patel@wdc.com>
---
Changes since v1:
- Use memblock_remove() instead of memblock_reserve()
---
 arch/riscv/mm/init.c | 8 ++++++++
 1 file changed, 8 insertions(+)

--
2.17.1

Comments

Christoph Hellwig April 3, 2019, 2:46 p.m. UTC | #1
> +			if ((reg->base + mem_size) < end)

No need for the braces.

Otherwise looks fine:

Reviewed-by: Christoph Hellwig <hch@lst.de>
diff mbox series

Patch

diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
index 5fd8c922e1c2..b5038a121005 100644
--- a/arch/riscv/mm/init.c
+++ b/arch/riscv/mm/init.c
@@ -121,6 +121,14 @@  void __init setup_bootmem(void)
 			 */
 			memblock_reserve(reg->base, vmlinux_end - reg->base);
 			mem_size = min(reg->size, (phys_addr_t)-PAGE_OFFSET);
+
+			/*
+			 * Remove memblock from the end of usable area to the
+			 * end of region
+			 */
+			if ((reg->base + mem_size) < end)
+				memblock_remove(reg->base + mem_size,
+						end - reg->base - mem_size);
 		}
 	}
 	BUG_ON(mem_size == 0);