2007-06-07 11:29:37 +09:00
/*
* arch / sh / kernel / topology . c
*
* Copyright ( C ) 2007 Paul Mundt
*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
*/
2007-05-14 12:50:43 +09:00
# include <linux/cpu.h>
# include <linux/cpumask.h>
# include <linux/init.h>
# include <linux/percpu.h>
2011-08-26 05:05:41 +00:00
# include <linux/topology.h>
2007-06-01 14:21:13 +09:00
# include <linux/node.h>
# include <linux/nodemask.h>
2011-07-31 19:20:02 -04:00
# include <linux/export.h>
2007-05-14 12:50:43 +09:00
static DEFINE_PER_CPU ( struct cpu , cpu_devices ) ;
2009-10-16 18:00:02 +09:00
cpumask_t cpu_core_map [ NR_CPUS ] ;
2011-01-18 20:55:34 +00:00
EXPORT_SYMBOL ( cpu_core_map ) ;
2009-10-16 18:00:02 +09:00
static cpumask_t cpu_coregroup_map ( unsigned int cpu )
{
/*
* Presently all SH - X3 SMP cores are multi - cores , so just keep it
* simple until we have a method for determining topology . .
*/
2012-02-15 15:28:04 +10:30
return * cpu_possible_mask ;
2009-10-16 18:00:02 +09:00
}
const struct cpumask * cpu_coregroup_mask ( unsigned int cpu )
{
return & cpu_core_map [ cpu ] ;
}
int arch_update_cpu_topology ( void )
{
unsigned int cpu ;
for_each_possible_cpu ( cpu )
cpu_core_map [ cpu ] = cpu_coregroup_map ( cpu ) ;
return 0 ;
}
2007-05-14 12:50:43 +09:00
static int __init topology_init ( void )
{
int i , ret ;
2007-06-01 14:21:13 +09:00
# ifdef CONFIG_NEED_MULTIPLE_NODES
for_each_online_node ( i )
register_one_node ( i ) ;
# endif
2007-05-14 12:50:43 +09:00
for_each_present_cpu ( i ) {
2010-04-26 18:20:29 +09:00
struct cpu * c = & per_cpu ( cpu_devices , i ) ;
c - > hotpluggable = 1 ;
ret = register_cpu ( c , i ) ;
2007-05-14 12:50:43 +09:00
if ( unlikely ( ret ) )
printk ( KERN_WARNING " %s: register_cpu %d failed (%d) \n " ,
2008-03-04 15:23:47 -08:00
__func__ , i , ret ) ;
2007-05-14 12:50:43 +09:00
}
2007-06-07 11:29:37 +09:00
# if defined(CONFIG_NUMA) && !defined(CONFIG_SMP)
/*
* In the UP case , make sure the CPU association is still
* registered under each node . Without this , sysfs fails
* to make the connection between nodes other than node0
* and cpu0 .
*/
for_each_online_node ( i )
if ( i ! = numa_node_id ( ) )
register_cpu_under_node ( raw_smp_processor_id ( ) , i ) ;
# endif
2007-05-14 12:50:43 +09:00
return 0 ;
}
subsys_initcall ( topology_init ) ;