]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/asm-x86/topology.h
[ARM] 4905/1: [AT91] Atmel SAM9 boards updated to new-style UART initialization
[linux-2.6-omap-h63xx.git] / include / asm-x86 / topology.h
index 9c251604ecc4b9d90ebbd66b7ad8f66a5de516bf..8af05a93f09714dd16fd54b7e3119960e554f103 100644 (file)
 #include <asm/mpspec.h>
 
 /* Mappings between logical cpu number and node number */
+#ifdef CONFIG_X86_32
 extern int cpu_to_node_map[];
+
+#else
+DECLARE_PER_CPU(int, x86_cpu_to_node_map);
+extern int x86_cpu_to_node_map_init[];
+extern void *x86_cpu_to_node_map_early_ptr;
+/* Returns the number of the current Node. */
+#define numa_node_id()         (early_cpu_to_node(raw_smp_processor_id()))
+#endif
+
 extern cpumask_t node_to_cpumask_map[];
 
+#define NUMA_NO_NODE   (-1)
+
 /* Returns the number of the node containing CPU 'cpu' */
+#ifdef CONFIG_X86_32
+#define early_cpu_to_node(cpu) cpu_to_node(cpu)
 static inline int cpu_to_node(int cpu)
 {
        return cpu_to_node_map[cpu];
 }
 
+#else /* CONFIG_X86_64 */
+static inline int early_cpu_to_node(int cpu)
+{
+       int *cpu_to_node_map = x86_cpu_to_node_map_early_ptr;
+
+       if (cpu_to_node_map)
+               return cpu_to_node_map[cpu];
+       else if (per_cpu_offset(cpu))
+               return per_cpu(x86_cpu_to_node_map, cpu);
+       else
+               return NUMA_NO_NODE;
+}
+
+static inline int cpu_to_node(int cpu)
+{
+#ifdef CONFIG_DEBUG_PER_CPU_MAPS
+       if (x86_cpu_to_node_map_early_ptr) {
+               printk("KERN_NOTICE cpu_to_node(%d): usage too early!\n",
+                       (int)cpu);
+               dump_stack();
+               return ((int *)x86_cpu_to_node_map_early_ptr)[cpu];
+       }
+#endif
+       if (per_cpu_offset(cpu))
+               return per_cpu(x86_cpu_to_node_map, cpu);
+       else
+               return NUMA_NO_NODE;
+}
+#endif /* CONFIG_X86_64 */
+
 /*
  * Returns the number of the node containing Node 'node'. This
  * architecture is flat, so it is a pretty simple function!