From c41c4c74356d6d8b502e4091ce9b7a0e10cf4a0f Mon Sep 17 00:00:00 2001 From: Jonathan Gray Date: Sun, 10 May 2015 05:42:47 +0000 Subject: limit physical memory to (paddr_t)-PAGE_SIZE (0xfffff000) novena has 4GB of physical memory and it's u-boot tells us memstart: 0x10000000 memsize: 0xf0000000 which would previously cause an overflow leading to "panic: initarm: out of memory" tweak from and ok miod@ --- sys/arch/armv7/armv7/armv7_machdep.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'sys') diff --git a/sys/arch/armv7/armv7/armv7_machdep.c b/sys/arch/armv7/armv7/armv7_machdep.c index d538bfc51a6..fabb406e4d3 100644 --- a/sys/arch/armv7/armv7/armv7_machdep.c +++ b/sys/arch/armv7/armv7/armv7_machdep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: armv7_machdep.c,v 1.18 2015/01/18 10:17:42 jsg Exp $ */ +/* $OpenBSD: armv7_machdep.c,v 1.19 2015/05/10 05:42:46 jsg Exp $ */ /* $NetBSD: lubbock_machdep.c,v 1.2 2003/07/15 00:25:06 lukem Exp $ */ /* @@ -461,11 +461,13 @@ initarm(void *arg0, void *arg1, void *arg2) * XXX pmap_bootstrap() needs an enema. */ physical_start = bootconfig.dram[0].address; - physical_end = physical_start + (bootconfig.dram[0].pages * PAGE_SIZE); + physical_end = MIN((uint64_t)physical_start + + (bootconfig.dram[0].pages * PAGE_SIZE), (paddr_t)-PAGE_SIZE); { physical_freestart = (((unsigned long)esym - KERNEL_TEXT_BASE +0xfff) & ~0xfff) + memstart; - physical_freeend = memstart+memsize; + physical_freeend = MIN((uint64_t)memstart+memsize, + (paddr_t)-PAGE_SIZE); } physmem = (physical_end - physical_start) / PAGE_SIZE; -- cgit v1.2.3