Unify the low/highmem code path from do_init_bootmem() by using (the) lowmem related variables/parameters even when the low/highmem split is not needed (64-bit) or configured. In such cases the "lowmem" variables/parameters continue to observe the definition by referring to memory directly mapped by the kernel
Signed-off-by: Emil Medve <emilian.me...@freescale.com> --- v2: Rebased, no changes arch/powerpc/mm/mem.c | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c index 32202c9..eaf5d1d8 100644 --- a/arch/powerpc/mm/mem.c +++ b/arch/powerpc/mm/mem.c @@ -188,27 +188,31 @@ EXPORT_SYMBOL_GPL(walk_system_ram_range); void __init do_init_bootmem(void) { unsigned long start, bootmap_pages; - unsigned long total_pages; struct memblock_region *reg; int boot_mapsize; + phys_addr_t _total_lowmem; + phys_addr_t _lowmem_end_addr; - max_low_pfn = max_pfn = memblock_end_of_DRAM() >> PAGE_SHIFT; - total_pages = (memblock_end_of_DRAM() - memstart_addr) >> PAGE_SHIFT; -#ifdef CONFIG_HIGHMEM - total_pages = total_lowmem >> PAGE_SHIFT; - max_low_pfn = lowmem_end_addr >> PAGE_SHIFT; +#ifndef CONFIG_HIGHMEM + _lowmem_end_addr = memblock_end_of_DRAM(); +#else + _lowmem_end_addr = lowmem_end_addr; #endif + max_pfn = memblock_end_of_DRAM() >> PAGE_SHIFT; + max_low_pfn = _lowmem_end_addr >> PAGE_SHIFT; + min_low_pfn = MEMORY_START >> PAGE_SHIFT; + /* * Find an area to use for the bootmem bitmap. Calculate the size of * bitmap required as (Total Memory) / PAGE_SIZE / BITS_PER_BYTE. * Add 1 additional page in case the address isn't page-aligned. */ - bootmap_pages = bootmem_bootmap_pages(total_pages); + _total_lowmem = _lowmem_end_addr - memstart_addr; + bootmap_pages = bootmem_bootmap_pages(_total_lowmem >> PAGE_SHIFT); start = memblock_alloc(bootmap_pages << PAGE_SHIFT, PAGE_SIZE); - min_low_pfn = MEMORY_START >> PAGE_SHIFT; boot_mapsize = init_bootmem_node(NODE_DATA(0), start >> PAGE_SHIFT, min_low_pfn, max_low_pfn); /* Place all memblock_regions in the same node and merge contiguous @@ -219,26 +223,18 @@ void __init do_init_bootmem(void) /* Add all physical memory to the bootmem map, mark each area * present. */ -#ifdef CONFIG_HIGHMEM - free_bootmem_with_active_regions(0, lowmem_end_addr >> PAGE_SHIFT); + free_bootmem_with_active_regions(0, max_low_pfn); /* reserve the sections we're already using */ for_each_memblock(reserved, reg) { - unsigned long top = reg->base + reg->size - 1; - if (top < lowmem_end_addr) + if (reg->base + reg->size - 1 < _lowmem_end_addr) reserve_bootmem(reg->base, reg->size, BOOTMEM_DEFAULT); - else if (reg->base < lowmem_end_addr) { - unsigned long trunc_size = lowmem_end_addr - reg->base; + else if (reg->base < _lowmem_end_addr) { + unsigned long trunc_size = _lowmem_end_addr - reg->base; reserve_bootmem(reg->base, trunc_size, BOOTMEM_DEFAULT); } } -#else - free_bootmem_with_active_regions(0, max_pfn); - /* reserve the sections we're already using */ - for_each_memblock(reserved, reg) - reserve_bootmem(reg->base, reg->size, BOOTMEM_DEFAULT); -#endif /* XXX need to clip this if using highmem? */ sparse_memory_present_with_active_regions(0); -- 1.9.2 _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev