linux/arch/arm/mm
Will Deacon 40f7bfe4f1 ARM: 6914/1: sparsemem: fix highmem detection when using SPARSEMEM
sanity_check_meminfo walks over the registered memory banks and attempts
to split banks across lowmem and highmem when they would otherwise
overlap with the vmalloc space.

When SPARSEMEM is used, there are two potential problems that occur
when the virtual address of the start of a bank is equal to vmalloc_min.

 1.) The end of lowmem is calculated as __pa(vmalloc_min - 1) + 1.
     In the above scenario, this will give the end address of the
     previous bank, rather than the actual bank we are interested in.
     This value is later used as the memblock limit and artificially
     restricts the total amount of available memory.

 2.) The checks to determine whether or not a bank belongs to highmem
     or not only check if __va(bank->start) is greater or less than
     vmalloc_min. In the case that it is equal, the bank is incorrectly
     treated as lowmem, which hoses the vmalloc area.

This patch fixes these two problems by checking whether the virtual
start address of a bank is >= vmalloc_min and then calculating
lowmem_end by finding the virtual end address of the highest lowmem
bank.

Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Reviewed-by: Nicolas Pitre <nicolas.pitre@linaro.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2011-05-26 10:23:25 +01:00
..
abort-ev4.S
abort-ev4t.S
abort-ev5t.S
abort-ev5tj.S
abort-ev6.S ARM: v6k: select clear exclusive code seqences according to V6 variants 2011-02-02 21:23:28 +00:00
abort-ev7.S arm: mm: qsd8x50: Fix incorrect permission faults 2010-05-03 11:15:05 -07:00
abort-lv4t.S
abort-macro.S
abort-nommu.S
alignment.c ARM: 6401/1: plug a race in the alignment trap handler 2010-09-23 15:17:04 +01:00
cache-fa.S ARM: 6466/1: implement flush_icache_all for the rest of the CPUs 2010-10-28 13:54:28 +01:00
cache-feroceon-l2.c ARM: fix cache-feroceon-l2 after stack based kmap_atomic() 2010-12-19 12:57:16 -05:00
cache-l2x0.c Merge branch 'misc' into devel 2011-03-16 23:35:25 +00:00
cache-tauros2.c
cache-v3.S ARM: 6466/1: implement flush_icache_all for the rest of the CPUs 2010-10-28 13:54:28 +01:00
cache-v4.S ARM: 6466/1: implement flush_icache_all for the rest of the CPUs 2010-10-28 13:54:28 +01:00
cache-v4wb.S Fix common misspellings 2011-03-31 11:26:23 -03:00
cache-v4wt.S Fix common misspellings 2011-03-31 11:26:23 -03:00
cache-v6.S ARM: 6535/1: V6 MPCore v6_dma_inv_range and v6_dma_flush_range RWFO fix 2010-12-14 22:23:34 +00:00
cache-v7.S Fix common misspellings 2011-03-31 11:26:23 -03:00
cache-xsc3l2.c ARM: fix cache-xsc3l2 after stack based kmap_atomic() 2010-12-19 12:57:08 -05:00
context.c ARM: 5905/1: ARM: Global ASID allocation on SMP 2010-02-15 21:39:51 +00:00
copypage-fa.c ARM: Gemini: fix compiler error in copypage-fa.c 2010-04-27 12:45:10 +02:00
copypage-feroceon.c ARM: 6164/1: Add kto and kfrom to input operands list. 2010-06-08 19:42:18 +01:00
copypage-v3.c
copypage-v4mc.c ARM: 6379/1: Assume new page cache pages have dirty D-cache 2010-09-19 12:17:43 +01:00
copypage-v4wb.c ARM: 6164/1: Add kto and kfrom to input operands list. 2010-06-08 19:42:18 +01:00
copypage-v4wt.c ARM: 6164/1: Add kto and kfrom to input operands list. 2010-06-08 19:42:18 +01:00
copypage-v6.c ARM: 6379/1: Assume new page cache pages have dirty D-cache 2010-09-19 12:17:43 +01:00
copypage-xsc3.c ARM: 6164/1: Add kto and kfrom to input operands list. 2010-06-08 19:42:18 +01:00
copypage-xscale.c ARM: 6379/1: Assume new page cache pages have dirty D-cache 2010-09-19 12:17:43 +01:00
dma-mapping.c Merge branches 'fixes', 'pgt-next' and 'versatile' into devel 2011-03-20 09:32:12 +00:00
extable.c
fault-armv.c ARM: pgtable: add pud-level code 2011-02-21 19:24:14 +00:00
fault.c ARM: pgtable: add pud-level code 2011-02-21 19:24:14 +00:00
fault.h
flush.c Merge branches 'consolidate', 'ep93xx', 'fixes', 'misc', 'mmci', 'remove' and 'spear' into for-linus 2011-05-23 19:27:40 +01:00
highmem.c ARM: get rid of kmap_high_l1_vipt() 2010-12-19 12:56:46 -05:00
idmap.c ARM: pgtable: add pud-level code 2011-02-21 19:24:14 +00:00
init.c ARM: 6913/1: sparsemem: allow pfn_valid to be overridden when using SPARSEMEM 2011-05-26 10:23:24 +01:00
iomap.c
ioremap.c Revert "ARM: relax ioremap prohibition (309caa9) for -final and -stable" 2010-12-24 09:49:52 +00:00
Kconfig Merge branch 'devel-stable' of master.kernel.org:/home/rmk/linux-2.6-arm 2011-03-17 19:08:06 -07:00
Makefile ARM: v6k: introduce CPU_V6K option 2011-02-02 21:23:26 +00:00
mm.h ARM: pgtable: add pud-level code 2011-02-21 19:24:14 +00:00
mmap.c ARM: 6877/1: the ADDR_NO_RANDOMIZE personality flag should be honored with mmap() 2011-04-14 09:15:24 +01:00
mmu.c ARM: 6914/1: sparsemem: fix highmem detection when using SPARSEMEM 2011-05-26 10:23:25 +01:00
nommu.c ARM: Convert platform reservations to use LMB rather than bootmem 2010-07-27 08:48:23 +01:00
pabort-legacy.S
pabort-v6.S
pabort-v7.S
pgd.c Merge branches 'fixes', 'pgt-next' and 'versatile' into devel 2011-03-20 09:32:12 +00:00
proc-arm6_7.S ARM: pm: add generic CPU suspend/resume support 2011-02-22 17:11:23 +00:00
proc-arm7tdmi.S ARM: pm: add generic CPU suspend/resume support 2011-02-22 17:11:23 +00:00
proc-arm9tdmi.S ARM: pm: add generic CPU suspend/resume support 2011-02-22 17:11:23 +00:00
proc-arm720.S Fix common misspellings 2011-03-31 11:26:23 -03:00
proc-arm740.S ARM: pm: add generic CPU suspend/resume support 2011-02-22 17:11:23 +00:00
proc-arm920.S Merge branch 'fix' of git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6 into fixes 2011-04-13 23:32:13 +01:00
proc-arm922.S Fix common misspellings 2011-03-31 11:26:23 -03:00
proc-arm925.S Fix common misspellings 2011-03-31 11:26:23 -03:00
proc-arm926.S ARM: Make consolidated PM sleep code depend on PM_SLEEP 2011-04-02 10:08:55 +01:00
proc-arm940.S ARM: pm: add generic CPU suspend/resume support 2011-02-22 17:11:23 +00:00
proc-arm946.S ARM: pm: add generic CPU suspend/resume support 2011-02-22 17:11:23 +00:00
proc-arm1020.S Fix common misspellings 2011-03-31 11:26:23 -03:00
proc-arm1020e.S Fix common misspellings 2011-03-31 11:26:23 -03:00
proc-arm1022.S Fix common misspellings 2011-03-31 11:26:23 -03:00
proc-arm1026.S Fix common misspellings 2011-03-31 11:26:23 -03:00
proc-fa526.S ARM: pm: add generic CPU suspend/resume support 2011-02-22 17:11:23 +00:00
proc-feroceon.S ARM: pm: add generic CPU suspend/resume support 2011-02-22 17:11:23 +00:00
proc-macros.S Fix common misspellings 2011-03-31 11:26:23 -03:00
proc-mohawk.S ARM: pm: add generic CPU suspend/resume support 2011-02-22 17:11:23 +00:00
proc-sa110.S ARM: pm: add generic CPU suspend/resume support 2011-02-22 17:11:23 +00:00
proc-sa1100.S ARM: Make consolidated PM sleep code depend on PM_SLEEP 2011-04-02 10:08:55 +01:00
proc-syms.c
proc-v6.S ARM: PJ4: remove the ARMv6 compatible cache method entries 2011-05-03 15:39:05 -04:00
proc-v7.S Merge branch 'fix' of git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6 into fixes 2011-04-13 23:32:13 +01:00
proc-xsc3.S ARM: Make consolidated PM sleep code depend on PM_SLEEP 2011-04-02 10:08:55 +01:00
proc-xscale.S ARM: Fix .size directive for xscale_dma_a0_map_area 2011-04-28 17:56:31 +08:00
tlb-fa.S
tlb-v3.S
tlb-v4.S
tlb-v4wb.S
tlb-v4wbi.S
tlb-v6.S
tlb-v7.S ARM: Allow SMP kernels to boot on UP systems 2010-10-04 20:23:36 +01:00
vmregion.c ARM: DMA: top-down allocation in DMA coherent region 2011-02-23 17:24:11 +00:00
vmregion.h ARM: DMA coherent allocator: align remapped addresses 2010-07-27 10:43:48 +01:00