diff options
Diffstat (limited to 'arch/arm/mm/init.c')
| -rw-r--r-- | arch/arm/mm/init.c | 17 | 
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index e34ea8adc1f..6ec1226fc62 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c @@ -22,6 +22,7 @@  #include <linux/memblock.h>  #include <asm/mach-types.h> +#include <asm/memblock.h>  #include <asm/prom.h>  #include <asm/sections.h>  #include <asm/setup.h> @@ -307,6 +308,21 @@ static void arm_memory_present(void)  }  #endif +static bool arm_memblock_steal_permitted = true; + +phys_addr_t arm_memblock_steal(phys_addr_t size, phys_addr_t align) +{ +	phys_addr_t phys; + +	BUG_ON(!arm_memblock_steal_permitted); + +	phys = memblock_alloc(size, align); +	memblock_free(phys, size); +	memblock_remove(phys, size); + +	return phys; +} +  void __init arm_memblock_init(struct meminfo *mi, struct machine_desc *mdesc)  {  	int i; @@ -349,6 +365,7 @@ void __init arm_memblock_init(struct meminfo *mi, struct machine_desc *mdesc)  	if (mdesc->reserve)  		mdesc->reserve(); +	arm_memblock_steal_permitted = false;  	memblock_allow_resize();  	memblock_dump_all();  }  |