linux/arch/powerpc/include/asm/topology.h
<<
>>
Prefs
   1#ifndef _ASM_POWERPC_TOPOLOGY_H
   2#define _ASM_POWERPC_TOPOLOGY_H
   3#ifdef __KERNEL__
   4
   5
   6struct sys_device;
   7struct 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/*
  22 * Before going off node we want the VM to try and reclaim from the local
  23 * node. It does this if the remote distance is larger than RECLAIM_DISTANCE.
  24 * With the default REMOTE_DISTANCE of 20 and the default RECLAIM_DISTANCE of
  25 * 20, we never reclaim and go off node straight away.
  26 *
  27 * To fix this we choose a smaller value of RECLAIM_DISTANCE.
  28 */
  29#define RECLAIM_DISTANCE 10
  30
  31#include <asm/mmzone.h>
  32
  33static inline int cpu_to_node(int cpu)
  34{
  35        return numa_cpu_lookup_table[cpu];
  36}
  37
  38#define parent_node(node)       (node)
  39
  40#define cpumask_of_node(node) ((node) == -1 ?                           \
  41                               cpu_all_mask :                           \
  42                               node_to_cpumask_map[node])
  43
  44struct pci_bus;
  45#ifdef CONFIG_PCI
  46extern int pcibus_to_node(struct pci_bus *bus);
  47#else
  48static inline int pcibus_to_node(struct pci_bus *bus)
  49{
  50        return -1;
  51}
  52#endif
  53
  54#define cpumask_of_pcibus(bus)  (pcibus_to_node(bus) == -1 ?            \
  55                                 cpu_all_mask :                         \
  56                                 cpumask_of_node(pcibus_to_node(bus)))
  57
  58/* sched_domains SD_NODE_INIT for PPC64 machines */
  59#define SD_NODE_INIT (struct sched_domain) {                            \
  60        .min_interval           = 8,                                    \
  61        .max_interval           = 32,                                   \
  62        .busy_factor            = 32,                                   \
  63        .imbalance_pct          = 125,                                  \
  64        .cache_nice_tries       = 1,                                    \
  65        .busy_idx               = 3,                                    \
  66        .idle_idx               = 1,                                    \
  67        .newidle_idx            = 0,                                    \
  68        .wake_idx               = 0,                                    \
  69        .forkexec_idx           = 0,                                    \
  70                                                                        \
  71        .flags                  = 1*SD_LOAD_BALANCE                     \
  72                                | 1*SD_BALANCE_NEWIDLE                  \
  73                                | 1*SD_BALANCE_EXEC                     \
  74                                | 1*SD_BALANCE_FORK                     \
  75                                | 0*SD_BALANCE_WAKE                     \
  76                                | 0*SD_WAKE_AFFINE                      \
  77                                | 0*SD_PREFER_LOCAL                     \
  78                                | 0*SD_SHARE_CPUPOWER                   \
  79                                | 0*SD_POWERSAVINGS_BALANCE             \
  80                                | 0*SD_SHARE_PKG_RESOURCES              \
  81                                | 1*SD_SERIALIZE                        \
  82                                | 0*SD_PREFER_SIBLING                   \
  83                                ,                                       \
  84        .last_balance           = jiffies,                              \
  85        .balance_interval       = 1,                                    \
  86}
  87
  88extern int __node_distance(int, int);
  89#define node_distance(a, b) __node_distance(a, b)
  90
  91extern void __init dump_numa_cpu_topology(void);
  92
  93extern int sysfs_add_device_to_node(struct sys_device *dev, int nid);
  94extern void sysfs_remove_device_from_node(struct sys_device *dev, int nid);
  95
  96#else
  97
  98static inline void dump_numa_cpu_topology(void) {}
  99
 100static inline int sysfs_add_device_to_node(struct sys_device *dev, int nid)
 101{
 102        return 0;
 103}
 104
 105static inline void sysfs_remove_device_from_node(struct sys_device *dev,
 106                                                int nid)
 107{
 108}
 109#endif /* CONFIG_NUMA */
 110
 111#if defined(CONFIG_NUMA) && defined(CONFIG_PPC_SPLPAR)
 112extern int start_topology_update(void);
 113extern int stop_topology_update(void);
 114#else
 115static inline int start_topology_update(void)
 116{
 117        return 0;
 118}
 119static inline int stop_topology_update(void)
 120{
 121        return 0;
 122}
 123#endif /* CONFIG_NUMA && CONFIG_PPC_SPLPAR */
 124
 125#include <asm-generic/topology.h>
 126
 127#ifdef CONFIG_SMP
 128#include <asm/cputable.h>
 129#define smt_capable()           (cpu_has_feature(CPU_FTR_SMT))
 130
 131#ifdef CONFIG_PPC64
 132#include <asm/smp.h>
 133
 134#define topology_thread_cpumask(cpu)    (per_cpu(cpu_sibling_map, cpu))
 135#define topology_core_cpumask(cpu)      (per_cpu(cpu_core_map, cpu))
 136#define topology_core_id(cpu)           (cpu_to_core_id(cpu))
 137#endif
 138#endif
 139
 140#endif /* __KERNEL__ */
 141#endif  /* _ASM_POWERPC_TOPOLOGY_H */
 142