ARM: Add arm_memblock_steal() to allocate memory away from the kernel
authorRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 13 Jan 2012 15:00:51 +0000 (15:00 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 13 Jan 2012 15:02:35 +0000 (15:02 +0000)
commit716a3dc20084da9b3ab17bd125005a5345e23e3b
treef7ba487050d33fc2913fdee81b384f5578ccb105
parent4de3a8e101150feaefa1139611a50ff37467f33e
ARM: Add arm_memblock_steal() to allocate memory away from the kernel

Several platforms are now using the memblock_alloc+memblock_free+
memblock_remove trick to obtain memory which won't be mapped in the
kernel's page tables.  Most platforms do this (correctly) in the
->reserve callback.  However, OMAP has started to call these functions
outside of this callback, and this is extremely unsafe - memory will
not be unmapped, and could well be given out after memblock is no
longer responsible for its management.

So, provide arm_memblock_steal() to perform this function, and ensure
that it panic()s if it is used inappropriately.  Convert everyone
over, including OMAP.

As a result, OMAP with OMAP4_ERRATA_I688 enabled will panic on boot
with this change.  Mark this option as BROKEN and make it depend on
BROKEN.  OMAP needs to be fixed, or 137d105d50 (ARM: OMAP4: Fix
errata i688 with MPU interconnect barriers.) reverted until such
time it can be fixed correctly.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/include/asm/memblock.h
arch/arm/mach-imx/mach-mx31_3ds.c
arch/arm/mach-imx/mach-mx31moboard.c
arch/arm/mach-imx/mach-pcm037.c
arch/arm/mach-omap2/Kconfig
arch/arm/mach-omap2/omap-secure.c
arch/arm/mach-omap2/omap4-common.c
arch/arm/mm/init.c
arch/arm/plat-omap/devices.c