2005-09-08 00:59:48 +04:00
# ifndef _ASM_POWERPC_TOPOLOGY_H
# define _ASM_POWERPC_TOPOLOGY_H
2005-12-17 00:43:46 +03:00
# ifdef __KERNEL__
2005-04-17 02:20:36 +04:00
2006-05-01 23:16:12 +04:00
struct sys_device ;
struct device_node ;
2005-04-17 02:20:36 +04:00
# ifdef CONFIG_NUMA
2010-02-18 15:29:23 +03:00
/*
* Before going off node we want the VM to try and reclaim from the local
* node . It does this if the remote distance is larger than RECLAIM_DISTANCE .
* With the default REMOTE_DISTANCE of 20 and the default RECLAIM_DISTANCE of
* 20 , we never reclaim and go off node straight away .
*
* To fix this we choose a smaller value of RECLAIM_DISTANCE .
*/
# define RECLAIM_DISTANCE 10
2010-05-17 00:19:56 +04:00
/*
* Before going off node we want the VM to try and reclaim from the local
* node . It does this if the remote distance is larger than RECLAIM_DISTANCE .
* With the default REMOTE_DISTANCE of 20 and the default RECLAIM_DISTANCE of
* 20 , we never reclaim and go off node straight away .
*
* To fix this we choose a smaller value of RECLAIM_DISTANCE .
*/
# define RECLAIM_DISTANCE 10
2005-09-08 00:59:48 +04:00
# include <asm/mmzone.h>
2005-04-17 02:20:36 +04:00
static inline int cpu_to_node ( int cpu )
{
2005-11-11 06:22:35 +03:00
return numa_cpu_lookup_table [ cpu ] ;
2005-04-17 02:20:36 +04:00
}
# define parent_node(node) (node)
2010-01-05 21:55:10 +03:00
# define cpumask_of_node(node) ((node) == -1 ? \
cpu_all_mask : \
2010-04-26 19:32:43 +04:00
node_to_cpumask_map [ node ] )
2008-12-26 14:53:39 +03:00
2006-06-10 14:53:06 +04:00
struct pci_bus ;
2006-11-27 21:19:00 +03:00
# ifdef CONFIG_PCI
2006-06-10 14:53:06 +04:00
extern int pcibus_to_node ( struct pci_bus * bus ) ;
2006-11-27 21:19:00 +03:00
# else
static inline int pcibus_to_node ( struct pci_bus * bus )
{
return - 1 ;
}
# endif
2006-06-10 14:53:06 +04:00
2008-12-26 14:53:39 +03:00
# define cpumask_of_pcibus(bus) (pcibus_to_node(bus) == -1 ? \
cpu_all_mask : \
cpumask_of_node ( pcibus_to_node ( bus ) ) )
2005-04-17 02:20:36 +04:00
/* sched_domains SD_NODE_INIT for PPC64 machines */
2010-02-07 16:23:30 +03:00
# define SD_NODE_INIT (struct sched_domain) { \
. min_interval = 8 , \
. max_interval = 32 , \
. busy_factor = 32 , \
. imbalance_pct = 125 , \
. cache_nice_tries = 1 , \
. busy_idx = 3 , \
. idle_idx = 1 , \
. newidle_idx = 0 , \
. wake_idx = 0 , \
. forkexec_idx = 0 , \
\
. flags = 1 * SD_LOAD_BALANCE \
| 1 * SD_BALANCE_NEWIDLE \
| 1 * SD_BALANCE_EXEC \
| 1 * SD_BALANCE_FORK \
| 0 * SD_BALANCE_WAKE \
| 0 * SD_WAKE_AFFINE \
| 0 * SD_PREFER_LOCAL \
| 0 * SD_SHARE_CPUPOWER \
| 0 * SD_POWERSAVINGS_BALANCE \
| 0 * SD_SHARE_PKG_RESOURCES \
| 1 * SD_SERIALIZE \
| 0 * SD_PREFER_SIBLING \
, \
. last_balance = jiffies , \
. balance_interval = 1 , \
2005-04-17 02:20:36 +04:00
}
2010-05-17 00:22:31 +04:00
extern int __node_distance ( int , int ) ;
# define node_distance(a, b) __node_distance(a, b)
2005-12-12 22:56:47 +03:00
extern void __init dump_numa_cpu_topology ( void ) ;
2006-05-01 23:16:12 +04:00
extern int sysfs_add_device_to_node ( struct sys_device * dev , int nid ) ;
extern void sysfs_remove_device_from_node ( struct sys_device * dev , int nid ) ;
2005-08-02 08:11:46 +04:00
# else
2005-04-17 02:20:36 +04:00
2005-12-12 22:56:47 +03:00
static inline void dump_numa_cpu_topology ( void ) { }
2006-05-01 23:16:12 +04:00
static inline int sysfs_add_device_to_node ( struct sys_device * dev , int nid )
{
return 0 ;
}
static inline void sysfs_remove_device_from_node ( struct sys_device * dev ,
int nid )
{
}
2008-03-31 19:41:55 +04:00
# endif /* CONFIG_NUMA */
2006-05-01 23:16:12 +04:00
2005-04-17 02:20:36 +04:00
# include <asm-generic/topology.h>
2006-06-27 13:54:42 +04:00
# ifdef CONFIG_SMP
# include <asm/cputable.h>
2006-11-13 06:51:46 +03:00
# define smt_capable() (cpu_has_feature(CPU_FTR_SMT))
# ifdef CONFIG_PPC64
# include <asm/smp.h>
2010-04-26 19:32:41 +04:00
# define topology_thread_cpumask(cpu) (per_cpu(cpu_sibling_map, cpu))
# define topology_core_cpumask(cpu) (per_cpu(cpu_core_map, cpu))
2008-07-27 09:24:54 +04:00
# define topology_core_id(cpu) (cpu_to_core_id(cpu))
2006-11-13 06:51:46 +03:00
# endif
2006-06-27 13:54:42 +04:00
# endif
2005-12-17 00:43:46 +03:00
# endif /* __KERNEL__ */
2005-09-08 00:59:48 +04:00
# endif /* _ASM_POWERPC_TOPOLOGY_H */