x86-64: Move nodenumber from PDA to per-cpu.
authorBrian Gerst <brgerst@gmail.com>
Sun, 18 Jan 2009 15:38:59 +0000 (00:38 +0900)
committerTejun Heo <tj@kernel.org>
Sun, 18 Jan 2009 15:38:59 +0000 (00:38 +0900)
tj: * s/nodenumber/node_number/
    * removed now unused pda variable from pda_init()

Signed-off-by: Brian Gerst <brgerst@gmail.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
arch/x86/include/asm/pda.h
arch/x86/include/asm/topology.h
arch/x86/kernel/cpu/common.c
arch/x86/kernel/setup_percpu.c

index 4527d70314d47e0cbe7a90100718ee8a91bb2c6f..b30ef6bddc438515e44b74564cba8688122889b9 100644 (file)
@@ -22,7 +22,6 @@ struct x8664_pda {
                                        /* gcc-ABI: this canary MUST be at
                                           offset 40!!! */
 #endif
-       short nodenumber;               /* number of current node (32k max) */
        short in_bootmem;               /* pda lives in bootmem */
        short isidle;
 } ____cacheline_aligned_in_smp;
index 87ca3fd86e88366ac1e5b3f2a564107bb9d5463c..ffea1fe03a99afad1321715898dea2c8f0042be4 100644 (file)
@@ -83,7 +83,8 @@ extern cpumask_t *node_to_cpumask_map;
 DECLARE_EARLY_PER_CPU(int, x86_cpu_to_node_map);
 
 /* Returns the number of the current Node. */
-#define numa_node_id()         read_pda(nodenumber)
+DECLARE_PER_CPU(int, node_number);
+#define numa_node_id()         percpu_read(node_number)
 
 #ifdef CONFIG_DEBUG_PER_CPU_MAPS
 extern int cpu_to_node(int cpu);
index e2323ecce1d32eea64e2db0a691bec3ae05af669..7976a6a0f65c1c626c4fb983e7c45f7f6d84198d 100644 (file)
@@ -897,18 +897,11 @@ DEFINE_PER_CPU(unsigned int, irq_count) = -1;
 
 void __cpuinit pda_init(int cpu)
 {
-       struct x8664_pda *pda = cpu_pda(cpu);
-
        /* Setup up data that may be needed in __get_free_pages early */
        loadsegment(fs, 0);
        loadsegment(gs, 0);
 
        load_pda_offset(cpu);
-
-       if (cpu != 0) {
-               if (pda->nodenumber == 0 && cpu_to_node(cpu) != NUMA_NO_NODE)
-                       pda->nodenumber = cpu_to_node(cpu);
-       }
 }
 
 static DEFINE_PER_CPU_PAGE_ALIGNED(char, exception_stacks
@@ -978,6 +971,12 @@ void __cpuinit cpu_init(void)
        if (cpu != 0)
                pda_init(cpu);
 
+#ifdef CONFIG_NUMA
+       if (cpu != 0 && percpu_read(node_number) == 0 &&
+           cpu_to_node(cpu) != NUMA_NO_NODE)
+               percpu_write(node_number, cpu_to_node(cpu));
+#endif
+
        me = current;
 
        if (cpumask_test_and_set_cpu(cpu, cpu_initialized_mask))
index 258497f93f4df9d82a449bfd3d23c3fcd58f116a..efbafbbff584050742444a40245738e19dc19ee5 100644 (file)
@@ -53,6 +53,8 @@ EXPORT_EARLY_PER_CPU_SYMBOL(x86_bios_cpu_apicid);
 
 #if defined(CONFIG_NUMA) && defined(CONFIG_X86_64)
 #define        X86_64_NUMA     1       /* (used later) */
+DEFINE_PER_CPU(int, node_number) = 0;
+EXPORT_PER_CPU_SYMBOL(node_number);
 
 /*
  * Map cpu index to node index
@@ -283,7 +285,7 @@ void __cpuinit numa_set_node(int cpu, int node)
        per_cpu(x86_cpu_to_node_map, cpu) = node;
 
        if (node != NUMA_NO_NODE)
-               cpu_pda(cpu)->nodenumber = node;
+               per_cpu(node_number, cpu) = node;
 }
 
 void __cpuinit numa_clear_node(int cpu)