2018-12-28 11:32:24 +03:00
// SPDX-License-Identifier: GPL-2.0
2007-06-07 06:29:37 +04:00
/*
* arch / sh / kernel / topology . c
*
* Copyright ( C ) 2007 Paul Mundt
*/
2007-05-14 07:50:43 +04:00
# include <linux/cpu.h>
# include <linux/cpumask.h>
# include <linux/init.h>
# include <linux/percpu.h>
2011-08-26 09:05:41 +04:00
# include <linux/topology.h>
2007-06-01 09:21:13 +04:00
# include <linux/node.h>
# include <linux/nodemask.h>
2011-08-01 03:20:02 +04:00
# include <linux/export.h>
2007-05-14 07:50:43 +04:00
static DEFINE_PER_CPU ( struct cpu , cpu_devices ) ;
2009-10-16 13:00:02 +04:00
cpumask_t cpu_core_map [ NR_CPUS ] ;
2011-01-18 23:55:34 +03:00
EXPORT_SYMBOL ( cpu_core_map ) ;
2009-10-16 13:00:02 +04:00
2016-03-30 01:50:02 +03:00
static cpumask_t cpu_coregroup_map ( int cpu )
2009-10-16 13:00:02 +04:00
{
/*
* 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 08:58:04 +04:00
return * cpu_possible_mask ;
2009-10-16 13:00:02 +04:00
}
2016-03-30 01:50:02 +03:00
const struct cpumask * cpu_coregroup_mask ( int cpu )
2009-10-16 13:00:02 +04:00
{
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 07:50:43 +04:00
static int __init topology_init ( void )
{
int i , ret ;
for_each_present_cpu ( i ) {
2010-04-26 13:20:29 +04:00
struct cpu * c = & per_cpu ( cpu_devices , i ) ;
c - > hotpluggable = 1 ;
ret = register_cpu ( c , i ) ;
2007-05-14 07:50:43 +04:00
if ( unlikely ( ret ) )
printk ( KERN_WARNING " %s: register_cpu %d failed (%d) \n " ,
2008-03-05 02:23:47 +03:00
__func__ , i , ret ) ;
2007-05-14 07:50:43 +04:00
}
2007-06-07 06:29:37 +04: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 07:50:43 +04:00
return 0 ;
}
subsys_initcall ( topology_init ) ;