[PATCH] powerpc/mm: Check gigantic page range correctly inside memblock

Anshuman Khandual khandual at linux.vnet.ibm.com
Mon Jul 3 17:31:30 AEST 2017

The gigantic page range received from platform actually extends
upto (block_size * expeted_pages) starting at any given address
instead of just a single 16GB page.

Fixes: 4792adbac9eb ("powerpc: Don't use a 16G page if beyond mem= limits")
Signed-off-by: Anshuman Khandual <khandual at linux.vnet.ibm.com>
Though in actual experiments never seen multiple gigantic pages (16GB)
starting at the same address. But again its very much possible looking
at the device tree property interfaces and depending upon what PowerVM

 arch/powerpc/mm/hash_utils_64.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
index f2095ce..a3f1e7d 100644
--- a/arch/powerpc/mm/hash_utils_64.c
+++ b/arch/powerpc/mm/hash_utils_64.c
@@ -507,7 +507,7 @@ static int __init htab_dt_scan_hugepage_blocks(unsigned long node,
 	printk(KERN_INFO "Huge page(16GB) memory: "
 			"addr = 0x%lX size = 0x%lX pages = %d\n",
 			phys_addr, block_size, expected_pages);
-	if (phys_addr + (16 * GB) <= memblock_end_of_DRAM()) {
+	if (phys_addr + block_size * expected_pages <= memblock_end_of_DRAM()) {
 		memblock_reserve(phys_addr, block_size * expected_pages);
 		add_gpage(phys_addr, block_size, expected_pages);

More information about the Linuxppc-dev mailing list