diff options
author | Michal Simek <monstr@monstr.eu> | 2011-12-15 15:47:16 +0100 |
---|---|---|
committer | Michal Simek <monstr@monstr.eu> | 2012-03-23 09:28:13 +0100 |
commit | baab8a828d2d6b5b073c192ebe777514bbf3c831 (patch) | |
tree | da9cf80b749b1470e5b408cd0e1ae69494b9e6a1 /arch/microblaze | |
parent | 832997990ab912ab8ed4ade08cb6ac5f471efa1e (diff) |
microblaze: Use active regions
Register lowmem active regions.
Signed-off-by: Michal Simek <monstr@monstr.eu>
Diffstat (limited to 'arch/microblaze')
-rw-r--r-- | arch/microblaze/Kconfig | 4 | ||||
-rw-r--r-- | arch/microblaze/mm/init.c | 18 |
2 files changed, 20 insertions, 2 deletions
diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig index 8e9da3d42814..3267cc5065d5 100644 --- a/arch/microblaze/Kconfig +++ b/arch/microblaze/Kconfig @@ -1,6 +1,7 @@ config MICROBLAZE def_bool y select HAVE_MEMBLOCK + select HAVE_MEMBLOCK_NODE_MAP select HAVE_FUNCTION_TRACER select HAVE_FUNCTION_TRACE_MCOUNT_TEST select HAVE_FUNCTION_GRAPH_TRACER @@ -30,6 +31,9 @@ config RWSEM_GENERIC_SPINLOCK config ZONE_DMA def_bool y +config ARCH_POPULATES_NODE_MAP + def_bool y + config RWSEM_XCHGADD_ALGORITHM bool diff --git a/arch/microblaze/mm/init.c b/arch/microblaze/mm/init.c index cbcdf24b1c89..43b3f604bafe 100644 --- a/arch/microblaze/mm/init.c +++ b/arch/microblaze/mm/init.c @@ -68,7 +68,8 @@ static void __init paging_init(void) zones_size[ZONE_DMA] = max_pfn; - free_area_init(zones_size); + /* We don't have holes in memory map */ + free_area_init_nodes(zones_size); } void __init setup_memory(void) @@ -142,8 +143,18 @@ void __init setup_memory(void) PFN_UP(TOPHYS((u32)klimit)), min_low_pfn, max_low_pfn); memblock_reserve(PFN_UP(TOPHYS((u32)klimit)) << PAGE_SHIFT, map_size); + /* Add active regions with valid PFNs */ + for_each_memblock(memory, reg) { + unsigned long start_pfn, end_pfn; + + start_pfn = memblock_region_memory_base_pfn(reg); + end_pfn = memblock_region_memory_end_pfn(reg); + memblock_set_node(start_pfn << PAGE_SHIFT, + (end_pfn - start_pfn) << PAGE_SHIFT, 0); + } + /* free bootmem is whole main memory */ - free_bootmem(memory_start, lowmem_size); + free_bootmem_with_active_regions(0, max_low_pfn); /* reserve allocate blocks */ for_each_memblock(reserved, reg) { @@ -162,6 +173,9 @@ void __init setup_memory(void) } } + /* XXX need to clip this if using highmem? */ + sparse_memory_present_with_active_regions(0); + #ifdef CONFIG_MMU init_bootmem_done = 1; #endif |