[ARM] prevent crashing when too much RAM installed
authorLennert Buytenhek <buytenh@wantstofly.org>
Mon, 4 Aug 2008 23:56:13 +0000 (01:56 +0200)
committerLennert Buytenhek <buytenh@marvell.com>
Sat, 9 Aug 2008 13:38:15 +0000 (15:38 +0200)
commit60296c71f6c5063e3c1f1d2619ca0b60940162e7
tree9b66e8716d83c3d350829376d75212798b2c72c6
parent09c0ed2e6eb87613b2670c15ba771ac671db19d9
[ARM] prevent crashing when too much RAM installed

This patch will truncate and/or ignore memory banks if their kernel
direct mappings would (partially) overlap with the vmalloc area or
the mappings between the vmalloc area and the address space top, to
prevent crashing during early boot if there happens to be more RAM
installed than we are expecting.

Since the start of the vmalloc area is not at a fixed address (but
the vmalloc end address is, via the per-platform VMALLOC_END define),
a default area of 128M is reserved for vmalloc mappings, which can
be shrunk or enlarged by passing an appropriate vmalloc= command line
option as it is done on x86.

On a board with a 3:1 user:kernel split, VMALLOC_END at 0xfe000000,
two 512M RAM banks and vmalloc=128M (the default), this patch gives:

Truncating RAM at 20000000-3fffffff to -35ffffff (vmalloc region overlap).
Memory: 512MB 352MB = 864MB total

On a board with a 3:1 user:kernel split, VMALLOC_END at 0xfe800000,
two 256M RAM banks and vmalloc=768M, this patch gives:

Truncating RAM at 00000000-0fffffff to -0e7fffff (vmalloc region overlap).
Ignoring RAM at 10000000-1fffffff (vmalloc region overlap).

Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
Tested-by: Riku Voipio <riku.voipio@iki.fi>
arch/arm/include/asm/memory.h
arch/arm/kernel/setup.c
arch/arm/mm/mmu.c