1 #ifndef _ASM_POWERPC_TOPOLOGY_H 2 #define _ASM_POWERPC_TOPOLOGY_H 3 #ifdef __KERNEL__ 4 5 6 struct device; 7 struct device_node; 8 9 #ifdef CONFIG_NUMA 10 11 /* 12 * Before going off node we want the VM to try and reclaim from the local 13 * node. It does this if the remote distance is larger than RECLAIM_DISTANCE. 14 * With the default REMOTE_DISTANCE of 20 and the default RECLAIM_DISTANCE of 15 * 20, we never reclaim and go off node straight away. 16 * 17 * To fix this we choose a smaller value of RECLAIM_DISTANCE. 18 */ 19 #define RECLAIM_DISTANCE 10 20 21 #include <asm/mmzone.h> 22 23 static inline int cpu_to_node(int cpu) 24 { 25 int nid; 26 27 nid = numa_cpu_lookup_table[cpu]; 28 29 /* 30 * During early boot, the numa-cpu lookup table might not have been 31 * setup for all CPUs yet. In such cases, default to node 0. 32 */ 33 return (nid < 0) ? 0 : nid; 34 } 35 36 #define parent_node(node) (node) 37 38 #define cpumask_of_node(node) ((node) == -1 ? \ 39 cpu_all_mask : \ 40 node_to_cpumask_map[node]) 41 42 struct pci_bus; 43 #ifdef CONFIG_PCI 44 extern int pcibus_to_node(struct pci_bus *bus); 45 #else 46 static inline int pcibus_to_node(struct pci_bus *bus) 47 { 48 return -1; 49 } 50 #endif 51 52 #define cpumask_of_pcibus(bus) (pcibus_to_node(bus) == -1 ? \ 53 cpu_all_mask : \ 54 cpumask_of_node(pcibus_to_node(bus))) 55 56 extern int __node_distance(int, int); 57 #define node_distance(a, b) __node_distance(a, b) 58 59 extern void __init dump_numa_cpu_topology(void); 60 61 extern int sysfs_add_device_to_node(struct device *dev, int nid); 62 extern void sysfs_remove_device_from_node(struct device *dev, int nid); 63 64 #else 65 66 static inline void dump_numa_cpu_topology(void) {} 67 68 static inline int sysfs_add_device_to_node(struct device *dev, int nid) 69 { 70 return 0; 71 } 72 73 static inline void sysfs_remove_device_from_node(struct device *dev, 74 int nid) 75 { 76 } 77 #endif /* CONFIG_NUMA */ 78 79 #if defined(CONFIG_NUMA) && defined(CONFIG_PPC_SPLPAR) 80 extern int start_topology_update(void); 81 extern int stop_topology_update(void); 82 extern int prrn_is_enabled(void); 83 #else 84 static inline int start_topology_update(void) 85 { 86 return 0; 87 } 88 static inline int stop_topology_update(void) 89 { 90 return 0; 91 } 92 static inline int prrn_is_enabled(void) 93 { 94 return 0; 95 } 96 #endif /* CONFIG_NUMA && CONFIG_PPC_SPLPAR */ 97 98 #include <asm-generic/topology.h> 99 100 #ifdef CONFIG_SMP 101 #include <asm/cputable.h> 102 103 #ifdef CONFIG_PPC64 104 #include <asm/smp.h> 105 106 #define topology_physical_package_id(cpu) (cpu_to_chip_id(cpu)) 107 #define topology_thread_cpumask(cpu) (per_cpu(cpu_sibling_map, cpu)) 108 #define topology_core_cpumask(cpu) (per_cpu(cpu_core_map, cpu)) 109 #define topology_core_id(cpu) (cpu_to_core_id(cpu)) 110 #endif 111 #endif 112 113 #endif /* __KERNEL__ */ 114 #endif /* _ASM_POWERPC_TOPOLOGY_H */ 115