[PATCH 5/7] numa-introduce-numa_mem_id-effective-local-memory-node-id-fix2

Lee Schermerhorn <[email protected]>
Newsgroups org.kernel.vger.linux-numa,org.kernel.vger.linux-arch,org.kvack.linux-mm
Message-ID <[email protected]>
Incremental patch 1 to
numa-introduce-numa_mem_id-effective-local-memory-node-id.patch
in mmotm 100428-1638.  Atop Andrew's build fix to that patch.

If any of the numa topology functions--numa_mem_id() et al--have not
been overridden by the arch, we can define them as static inline
functions.

Now, since we can no longer use cpu_to_mem() as an lvalue, also
define set_cpu_numa_mem(cpu, node) and use this to initialize the
per cpu numa_mem variable in __build_all_zonelists().

Signed-off-by: Lee Schermerhorn <[email protected]>

 include/linux/topology.h |   24 +++++++++++++++++++++---
 mm/page_alloc.c          |    2 +-
 2 files changed, 22 insertions(+), 4 deletions(-)

Index: linux-2.6.34-rc5-mmotm-100428-1653/include/linux/topology.h
===================================================================
--- linux-2.6.34-rc5-mmotm-100428-1653.orig/include/linux/topology.h
+++ linux-2.6.34-rc5-mmotm-100428-1653/include/linux/topology.h
@@ -256,7 +256,17 @@ static inline int numa_node_id(void)
 DECLARE_PER_CPU(int, numa_mem);
 
 #ifndef set_numa_mem
-#define set_numa_mem(__node) percpu_write(numa_mem, __node)
+static inline void set_numa_mem(int node)
+{
+	percpu_write(numa_mem, node);
+}
+#endif
+
+#ifndef set_cpu_numa_mem
+static inline void set_cpu_numa_mem(int cpu, int node)
+{
+	per_cpu(numa_mem, cpu) = node;
+}
 #endif
 
 #else	/* !CONFIG_HAVE_MEMORYLESS_NODES */
@@ -264,15 +274,23 @@ DECLARE_PER_CPU(int, numa_mem);
 #define numa_mem numa_node
 static inline void set_numa_mem(int node) {}
 
+static inline void set_cpu_numa_mem(int cpu, int node) {}
+
 #endif	/* [!]CONFIG_HAVE_MEMORYLESS_NODES */
 
 #ifndef numa_mem_id
 /* Returns the number of the nearest Node with memory */
-#define numa_mem_id()		__this_cpu_read(numa_mem)
+static inline int numa_mem_id(void)
+{
+	return __this_cpu_read(numa_mem);
+}
 #endif
 
 #ifndef cpu_to_mem
-#define cpu_to_mem(__cpu)	per_cpu(numa_mem, (__cpu))
+static inline int cpu_to_mem(int cpu)
+{
+	return per_cpu(numa_mem, cpu);
+}
 #endif
 
 #ifndef topology_physical_package_id
Index: linux-2.6.34-rc5-mmotm-100428-1653/mm/page_alloc.c
===================================================================
--- linux-2.6.34-rc5-mmotm-100428-1653.orig/mm/page_alloc.c
+++ linux-2.6.34-rc5-mmotm-100428-1653/mm/page_alloc.c
@@ -3000,7 +3000,7 @@ static int __build_all_zonelists(void *d
 		 * node/memory hotplug, we'll fixup all on-line cpus.
 		 */
 		if (cpu_online(cpu))
-			cpu_to_mem(cpu) = local_memory_node(cpu_to_node(cpu));
+			set_cpu_numa_mem(cpu, local_memory_node(cpu_to_node(cpu)));
 #endif
 	}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.