diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 9bd7de3..686d9ed 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -4503,8 +4503,8 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,
 	 * Initialise at least 2G of a node but also take into account that
 	 * two large system hashes that can take up an 8th of memory.
 	 */
-	max_initialise = min(2UL << (30 - PAGE_SHIFT),
-			(pgdat->node_spanned_pages >> 3));
+	max_initialise = max(128UL << (20 - PAGE_SHIFT),
+			(pgdat->node_spanned_pages >> 8));
 
 	z = &pgdat->node_zones[zone];
 	for (pfn = start_pfn; pfn < end_pfn; pfn++) {
