Fix i386 bootup with HIGHMEM+SLAB_DEBUG+NUMA and no real highmem
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
@@ -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;