1 #ifndef _ASM_ALPHA_TOPOLOGY_H 2 #define _ASM_ALPHA_TOPOLOGY_H 3 4 #include <linux/smp.h> 5 #include <linux/threads.h> 6 #include <asm/machvec.h> 7 8 #ifdef CONFIG_NUMA 9 static inline int cpu_to_node(int cpu) 10 { 11 int node; 12 13 if (!alpha_mv.cpuid_to_nid) 14 return 0; 15 16 node = alpha_mv.cpuid_to_nid(cpu); 17 18 #ifdef DEBUG_NUMA 19 BUG_ON(node < 0); 20 #endif 21 22 return node; 23 } 24 25 static inline cpumask_t node_to_cpumask(int node) 26 { 27 cpumask_t node_cpu_mask = CPU_MASK_NONE; 28 int cpu; 29 30 for_each_online_cpu(cpu) { 31 if (cpu_to_node(cpu) == node) 32 cpu_set(cpu, node_cpu_mask); 33 } 34 35 #ifdef DEBUG_NUMA 36 printk("node %d: cpu_mask: %016lx\n", node, node_cpu_mask); 37 #endif 38 39 return node_cpu_mask; 40 } 41 42 extern struct cpumask node_to_cpumask_map[]; 43 /* FIXME: This is dumb, recalculating every time. But simple. */ 44 static const struct cpumask *cpumask_of_node(int node) 45 { 46 int cpu; 47 48 cpumask_clear(&node_to_cpumask_map[node]); 49 50 for_each_online_cpu(cpu) { 51 if (cpu_to_node(cpu) == node) 52 cpumask_set_cpu(cpu, node_to_cpumask_map[node]); 53 } 54 55 return &node_to_cpumask_map[node]; 56 } 57 58 #define pcibus_to_cpumask(bus) (cpu_online_map) 59 #define cpumask_of_pcibus(bus) (cpu_online_mask) 60 61 #endif /* !CONFIG_NUMA */ 62 # include <asm-generic/topology.h> 63 64 #endif /* _ASM_ALPHA_TOPOLOGY_H */ 65