public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Fix i386 bootup with HIGHMEM+SLAB_DEBUG+NUMA and no real highmem
@ 2004-07-16 12:11 Andi Kleen
  0 siblings, 0 replies; only message in thread
From: Andi Kleen @ 2004-07-16 12:11 UTC (permalink / raw)
  To: torvalds; +Cc: linux-kernel, gone


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

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;



^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2004-07-16 12:13 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-07-16 12:11 [PATCH] Fix i386 bootup with HIGHMEM+SLAB_DEBUG+NUMA and no real highmem Andi Kleen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox