<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">
From: Matthew Dobson &lt;colpatch@us.ibm.com&gt;

Remove MAX_NR_NODES.  This value is only used in a couple of places, and
it's incorrectly used in all those places as far as I can tell.  Replace
with MAX_NUMNODES.  Create MAX_NODES_SHIFT and use this value to check
NODES_SHIFT is appropriate.  A possible future patch should make
MAX_NODES_SHIFT vary based on 32 vs.  64 bit archs.



 arch/i386/kernel/smpboot.c |    6 +++---
 include/linux/mmzone.h     |   16 ++++++++++++----
 mm/page_alloc.c            |    2 +-
 3 files changed, 16 insertions(+), 8 deletions(-)

diff -puN arch/i386/kernel/smpboot.c~node-enumeration-cleanup-02 arch/i386/kernel/smpboot.c
--- 25/arch/i386/kernel/smpboot.c~node-enumeration-cleanup-02	2003-09-16 00:15:47.000000000 -0700
+++ 25-akpm/arch/i386/kernel/smpboot.c	2003-09-16 00:15:47.000000000 -0700
@@ -499,8 +499,8 @@ static struct task_struct * __init fork_
 #ifdef CONFIG_NUMA
 
 /* which logical CPUs are on which nodes */
-cpumask_t node_2_cpu_mask[MAX_NR_NODES] =
-				{ [0 ... MAX_NR_NODES-1] = CPU_MASK_NONE };
+cpumask_t node_2_cpu_mask[MAX_NUMNODES] =
+				{ [0 ... MAX_NUMNODES-1] = CPU_MASK_NONE };
 /* which node each logical CPU is on */
 int cpu_2_node[NR_CPUS] = { [0 ... NR_CPUS-1] = 0 };
 
@@ -518,7 +518,7 @@ static inline void unmap_cpu_to_node(int
 	int node;
 
 	printk("Unmapping cpu %d from all nodes\n", cpu);
-	for (node = 0; node &lt; MAX_NR_NODES; node ++)
+	for (node = 0; node &lt; MAX_NUMNODES; node ++)
 		cpu_clear(cpu, node_2_cpu_mask[node]);
 	cpu_2_node[cpu] = -1;
 }
diff -puN include/linux/mmzone.h~node-enumeration-cleanup-02 include/linux/mmzone.h
--- 25/include/linux/mmzone.h~node-enumeration-cleanup-02	2003-09-16 00:15:47.000000000 -0700
+++ 25-akpm/include/linux/mmzone.h	2003-09-16 00:15:47.000000000 -0700
@@ -304,19 +304,27 @@ extern void setup_per_zone_pages_min(voi
 #define numa_node_id()		(cpu_to_node(smp_processor_id()))
 
 #ifndef CONFIG_DISCONTIGMEM
+
 extern struct pglist_data contig_page_data;
 #define NODE_DATA(nid)		(&amp;contig_page_data)
 #define NODE_MEM_MAP(nid)	mem_map
-#define MAX_NR_NODES		1
+#define MAX_NODES_SHIFT		0
+
 #else /* CONFIG_DISCONTIGMEM */
 
 #include &lt;asm/mmzone.h&gt;
-
-/* page-&gt;zone is currently 8 bits ... */
-#define MAX_NR_NODES		(255 / MAX_NR_ZONES)
+/*
+ * page-&gt;zone is currently 8 bits
+ * there are 3 zones (2 bits)
+ * this leaves 8-2=6 bits for nodes
+ */
+#define MAX_NODES_SHIFT		6
 
 #endif /* !CONFIG_DISCONTIGMEM */
 
+#if NODES_SHIFT &gt; MAX_NODES_SHIFT
+#error NODES_SHIFT &gt; MAX_NODES_SHIFT
+#endif
 
 extern DECLARE_BITMAP(node_online_map, MAX_NUMNODES);
 extern DECLARE_BITMAP(memblk_online_map, MAX_NR_MEMBLKS);
diff -puN mm/page_alloc.c~node-enumeration-cleanup-02 mm/page_alloc.c
--- 25/mm/page_alloc.c~node-enumeration-cleanup-02	2003-09-16 00:15:47.000000000 -0700
+++ 25-akpm/mm/page_alloc.c	2003-09-16 00:15:47.000000000 -0700
@@ -50,7 +50,7 @@ EXPORT_SYMBOL(nr_swap_pages);
  * Used by page_zone() to look up the address of the struct zone whose
  * id is encoded in the upper bits of page-&gt;flags
  */
-struct zone *zone_table[MAX_NR_ZONES*MAX_NR_NODES];
+struct zone *zone_table[MAX_NR_ZONES*MAX_NUMNODES];
 EXPORT_SYMBOL(zone_table);
 
 static char *zone_names[MAX_NR_ZONES] = { "DMA", "Normal", "HighMem" };

_
</pre></body></html>