Fix i386 bootup with HIGHMEM+SLAB_DEBUG+NUMA and no real highmem
diff mbox series

Message ID m3fz7s2lud.fsf@averell.firstfloor.org
State New, archived
Headers show
Series
  • Fix i386 bootup with HIGHMEM+SLAB_DEBUG+NUMA and no real highmem
Related show

Commit Message

Andi Kleen July 16, 2004, 12:11 p.m. UTC
For some reason I booted a NUMA and SLAB_DEBUG i386 kernel on a non
NUMA 512MB machine.  This caused an oops at bootup in change_page_attr.
The reason was that highmem_start_start page ended up zero and 
that triggered the highmem check in change_page_attr when the 
slab debug code would unmap a kernel mapping.

Fix is straightforward: if there is no highmem set highmem_start_page
to max_low_pfn+1

-Andi



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Patch
diff mbox series

diff -u linux-2.6.8rc1-work/arch/i386/mm/discontig.c-o linux-2.6.8rc1-work/arch/i386/mm/discontig.c
--- linux-2.6.8rc1-work/arch/i386/mm/discontig.c-o	2004-07-15 08:41:17.000000000 +0200
+++ linux-2.6.8rc1-work/arch/i386/mm/discontig.c	2004-07-16 12:21:37.000000000 +0200
@@ -448,7 +448,11 @@ 
 void __init set_max_mapnr_init(void)
 {
 #ifdef CONFIG_HIGHMEM
-	highmem_start_page = NODE_DATA(0)->node_zones[ZONE_HIGHMEM].zone_mem_map;
+	struct zone *high0 = &NODE_DATA(0)->node_zones[ZONE_HIGHMEM];
+	if (high0->spanned_pages > 0)
+	      	highmem_start_page = high0->zone_mem_map;
+	else
+		highmem_start_page = pfn_to_page(max_low_pfn+1); 
 	num_physpages = highend_pfn;
 #else
 	num_physpages = max_low_pfn;