[S390] Add topology_core_siblings to topology.h
This exposes the core siblings to user space via sysfs. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
This commit is contained in:
committed by
Martin Schwidefsky
parent
edf2209692
commit
d00aa4e7d0
@@ -66,6 +66,8 @@ static struct timer_list topology_timer;
|
|||||||
static void set_topology_timer(void);
|
static void set_topology_timer(void);
|
||||||
static DECLARE_WORK(topology_work, topology_work_fn);
|
static DECLARE_WORK(topology_work, topology_work_fn);
|
||||||
|
|
||||||
|
cpumask_t cpu_core_map[NR_CPUS];
|
||||||
|
|
||||||
cpumask_t cpu_coregroup_map(unsigned int cpu)
|
cpumask_t cpu_coregroup_map(unsigned int cpu)
|
||||||
{
|
{
|
||||||
struct core_info *core = &core_info;
|
struct core_info *core = &core_info;
|
||||||
@@ -199,6 +201,14 @@ int topology_set_cpu_management(int fc)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void update_cpu_core_map(void)
|
||||||
|
{
|
||||||
|
int cpu;
|
||||||
|
|
||||||
|
for_each_present_cpu(cpu)
|
||||||
|
cpu_core_map[cpu] = cpu_coregroup_map(cpu);
|
||||||
|
}
|
||||||
|
|
||||||
void arch_update_cpu_topology(void)
|
void arch_update_cpu_topology(void)
|
||||||
{
|
{
|
||||||
struct tl_info *info = tl_info;
|
struct tl_info *info = tl_info;
|
||||||
@@ -206,11 +216,13 @@ void arch_update_cpu_topology(void)
|
|||||||
int cpu;
|
int cpu;
|
||||||
|
|
||||||
if (!machine_has_topology) {
|
if (!machine_has_topology) {
|
||||||
|
update_cpu_core_map();
|
||||||
topology_update_polarization_simple();
|
topology_update_polarization_simple();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
stsi(info, 15, 1, 2);
|
stsi(info, 15, 1, 2);
|
||||||
tl_to_cores(info);
|
tl_to_cores(info);
|
||||||
|
update_cpu_core_map();
|
||||||
for_each_online_cpu(cpu) {
|
for_each_online_cpu(cpu) {
|
||||||
sysdev = get_cpu_sysdev(cpu);
|
sysdev = get_cpu_sysdev(cpu);
|
||||||
kobject_uevent(&sysdev->kobj, KOBJ_CHANGE);
|
kobject_uevent(&sysdev->kobj, KOBJ_CHANGE);
|
||||||
@@ -251,20 +263,23 @@ static int __init init_topology_update(void)
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
rc = 0;
|
||||||
if (!machine_has_topology) {
|
if (!machine_has_topology) {
|
||||||
topology_update_polarization_simple();
|
topology_update_polarization_simple();
|
||||||
return 0;
|
goto out;
|
||||||
}
|
}
|
||||||
init_timer_deferrable(&topology_timer);
|
init_timer_deferrable(&topology_timer);
|
||||||
if (machine_has_topology_irq) {
|
if (machine_has_topology_irq) {
|
||||||
rc = register_external_interrupt(0x2005, topology_interrupt);
|
rc = register_external_interrupt(0x2005, topology_interrupt);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
goto out;
|
||||||
ctl_set_bit(0, 8);
|
ctl_set_bit(0, 8);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
set_topology_timer();
|
set_topology_timer();
|
||||||
return 0;
|
out:
|
||||||
|
update_cpu_core_map();
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
__initcall(init_topology_update);
|
__initcall(init_topology_update);
|
||||||
|
|
||||||
|
@@ -7,6 +7,10 @@
|
|||||||
|
|
||||||
cpumask_t cpu_coregroup_map(unsigned int cpu);
|
cpumask_t cpu_coregroup_map(unsigned int cpu);
|
||||||
|
|
||||||
|
extern cpumask_t cpu_core_map[NR_CPUS];
|
||||||
|
|
||||||
|
#define topology_core_siblings(cpu) (cpu_core_map[cpu])
|
||||||
|
|
||||||
int topology_set_cpu_management(int fc);
|
int topology_set_cpu_management(int fc);
|
||||||
void topology_schedule_update(void);
|
void topology_schedule_update(void);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user