[request-for-test] [patch 3/3] Allow DISCONTIGMEM without NUMA

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This turned out to be less tedious that I had feared. The bulk of the
changes are in discontig.c, just making sure that things that don't exist
without NUMA aren't used.

The other changes mainly relate to making sure that NODE_DATA does exists
when CONFIG_NEED_MULTIPLE_NODES is set.

Boots on an HP RX2620, but I haven't done any further testing.

From: Simon Horman <horms@xxxxxxxxxxxx>

Index: linux-2.6/arch/ia64/mm/discontig.c
===================================================================
--- linux-2.6.orig/arch/ia64/mm/discontig.c	2007-05-10 18:46:12.000000000 +0900
+++ linux-2.6/arch/ia64/mm/discontig.c	2007-05-10 18:47:01.000000000 +0900
@@ -27,6 +27,15 @@
 #include <asm/numa.h>
 #include <asm/sections.h>
 
+static int node_of_cpu (int cpu)
+{
+#ifdef CONFIG_NUMA
+	return node_cpuid[cpu].nid;
+#else
+	return 0;
+#endif
+}
+
 /*
  * Track per-node information needed to setup the boot memory allocator, the
  * per-node areas, and the real VM.
@@ -101,13 +110,17 @@ static int __init build_node_maps(unsign
  */
 static int __meminit early_nr_cpus_node(int node)
 {
+#ifdef CONFIG_NUMA
 	int cpu, n = 0;
 
 	for (cpu = 0; cpu < NR_CPUS; cpu++)
-		if (node == node_cpuid[cpu].nid)
+		if (node == node_of_cpu(cpu))
 			n++;
 
 	return n;
+#else
+	return NR_CPUS;
+#endif
 }
 
 /**
@@ -142,7 +155,7 @@ static void *per_cpu_node_setup(void *cp
 	int cpu;
 
 	for (cpu = 0; cpu < NR_CPUS; cpu++) {
-		if (node == node_cpuid[cpu].nid) {
+		if (node == node_of_cpu(cpu)) {
 			memcpy(__va(cpu_data), __phys_per_cpu_start,
 			       __per_cpu_end - __per_cpu_start);
 			__per_cpu_offset[cpu] = (char*)__va(cpu_data) -
@@ -345,14 +358,14 @@ static void __init initialize_pernode_da
 #ifdef CONFIG_SMP
 	/* Set the node_data pointer for each per-cpu struct */
 	for (cpu = 0; cpu < NR_CPUS; cpu++) {
-		node = node_cpuid[cpu].nid;
+		node = node_of_cpu(cpu);
 		per_cpu(cpu_info, cpu).node_data = mem_data[node].node_data;
 	}
 #else
 	{
 		struct cpuinfo_ia64 *cpu0_cpu_info;
 		cpu = 0;
-		node = node_cpuid[cpu].nid;
+		node = node_of_cpu(cpu);
 		cpu0_cpu_info = (struct cpuinfo_ia64 *)(__phys_per_cpu_start +
 			((char *)&per_cpu__cpu_info - __per_cpu_start));
 		cpu0_cpu_info->node_data = mem_data[node].node_data;
@@ -580,9 +593,12 @@ void show_mem(void)
  */
 void call_pernode_memory(unsigned long start, unsigned long len, void *arg)
 {
-	unsigned long rs, re, end = start + len;
+	unsigned long end = start + len;
 	void (*func)(unsigned long, unsigned long, int);
+#ifdef CONFIG_NUMA
+	unsigned long rs, re
 	int i;
+#endif
 
 	start = PAGE_ALIGN(start);
 	end &= PAGE_MASK;
@@ -591,6 +607,7 @@ void call_pernode_memory(unsigned long s
 
 	func = arg;
 
+#ifdef CONFIG_NUMA
 	if (!num_node_memblks) {
 		/* No SRAT table, so assume one node (node 0) */
 		(*func)(start, end - start, 0);
@@ -608,6 +625,9 @@ void call_pernode_memory(unsigned long s
 		if (re == end)
 			break;
 	}
+#else
+	(*func)(start, end - start, 0);
+#endif
 }
 
 /**
Index: linux-2.6/include/asm-ia64/nodedata.h
===================================================================
--- linux-2.6.orig/include/asm-ia64/nodedata.h	2007-05-10 17:58:00.000000000 +0900
+++ linux-2.6/include/asm-ia64/nodedata.h	2007-05-10 18:59:07.000000000 +0900
@@ -16,7 +16,7 @@
 #include <asm/percpu.h>
 #include <asm/mmzone.h>
 
-#ifdef CONFIG_NUMA
+#ifdef CONFIG_NEED_MULTIPLE_NODES
 
 /*
  * Node Data. One of these structures is located on each node of a NUMA system.
@@ -58,6 +58,6 @@ struct ia64_node_data {
 	((struct ia64_node_data *)((u64)(pgdat) + 	\
 				   L1_CACHE_ALIGN(sizeof(struct pglist_data))))
 
-#endif /* CONFIG_NUMA */
+#endif /* !CONFIG_NEED_MULTIPLE_NODES */
 
 #endif /* _ASM_IA64_NODEDATA_H */
Index: linux-2.6/include/asm-ia64/processor.h
===================================================================
--- linux-2.6.orig/include/asm-ia64/processor.h	2007-05-10 18:16:17.000000000 +0900
+++ linux-2.6/include/asm-ia64/processor.h	2007-05-10 18:47:01.000000000 +0900
@@ -75,9 +75,7 @@
 #include <asm/rse.h>
 #include <asm/unwind.h>
 #include <asm/atomic.h>
-#ifdef CONFIG_NUMA
 #include <asm/nodedata.h>
-#endif
 
 /* like above but expressed as bitfields for more efficient access: */
 struct ia64_psr {
@@ -160,7 +158,7 @@ struct cpuinfo_ia64 {
 	char vendor[16];
 	char *model_name;
 
-#ifdef CONFIG_NUMA
+#ifdef CONFIG_NEED_MULTIPLE_NODES
 	struct ia64_node_data *node_data;
 #endif
 };
Index: linux-2.6/include/asm-ia64/meminit.h
===================================================================
--- linux-2.6.orig/include/asm-ia64/meminit.h	2007-05-10 18:01:02.000000000 +0900
+++ linux-2.6/include/asm-ia64/meminit.h	2007-05-10 18:47:01.000000000 +0900
@@ -48,7 +48,7 @@ extern int reserve_elfcorehdr(unsigned l
 #define GRANULEROUNDUP(n)	(((n)+IA64_GRANULE_SIZE-1) & ~(IA64_GRANULE_SIZE-1))
 #define ORDERROUNDDOWN(n)	((n) & ~((PAGE_SIZE<<MAX_ORDER)-1))
 
-#ifdef CONFIG_NUMA
+#ifdef CONFIG_NEED_MULTIPLE_NODES
   extern void call_pernode_memory (unsigned long start, unsigned long len, void *func);
 #else
 # define call_pernode_memory(start, len, func)	(*func)(start, len, 0)

-- 

-- 
Horms
  H: http://www.vergenet.net/~horms/
  W: http://www.valinux.co.jp/en/

-
To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [Sparc Linux]     [DCCP]     [Linux ARM]     [Yosemite News]     [Linux SCSI]     [Linux x86_64]     [Linux for Ham Radio]

  Powered by Linux