memblock, bootmem: Round pfn properly for memory and reserved regions
authorYinghai Lu <yinghai@kernel.org>
Tue, 12 Oct 2010 21:07:09 +0000 (14:07 -0700)
committerH. Peter Anvin <hpa@linux.intel.com>
Tue, 12 Oct 2010 22:37:51 +0000 (15:37 -0700)
commitc7fc2de0c83dbd2eaf759c5cd0e2b9cf1eb4df3a
treec4413e9b3bc164394c2daccf34e18e0b1d6c8811
parent8e4029ee3517084ae00fbfbcb51cc365d8857061
memblock, bootmem: Round pfn properly for memory and reserved regions

We need to round memory regions correctly -- specifically, we need to
round reserved region in the more expansive direction (lower limit
down, upper limit up) whereas usable memory regions need to be rounded
in the more restrictive direction (lower limit up, upper limit down).

This introduces two set of inlines:

memblock_region_memory_base_pfn()
memblock_region_memory_end_pfn()
memblock_region_reserved_base_pfn()
memblock_region_reserved_end_pfn()

Although they are antisymmetric (and therefore are technically
duplicates) the use of the different inlines explicitly documents the
programmer's intention.

The lack of proper rounding caused a bug on ARM, which was then found
to also affect other architectures.

Reported-by: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
LKML-Reference: <4CB4CDFD.4020105@kernel.org>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
arch/arm/mm/init.c
arch/powerpc/mm/mem.c
arch/powerpc/mm/numa.c
arch/sh/mm/init.c
arch/sparc/mm/init_64.c
include/linux/memblock.h