Skip to contentSkip to conversation

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

PATCH New Andi Kleen 1 participant 1 message Jul 16, 2004

lore
Share & tools
lore

Andi Kleen

author
#0 lore raw

PATCH 1/1 Fix i386 bootup with HIGHMEM+SLAB_DEBUG+NUMA and no real highmem

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

arch/i386/mm/discontig.c renamed from arch/i386/mm/discontig.c-o +5 -1
diff -u linux-2.6.8rc1-work/arch/i386/mm/discontig.c-o linux-2.6.8rc1-work/arch/i386/mm/discontig.c
@@ -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;