Commit d00aa4e7 authored by Heiko Carstens's avatar Heiko Carstens Committed by Martin Schwidefsky

[S390] Add topology_core_siblings to topology.h

This exposes the core siblings to user space via sysfs.
Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
parent edf22096
...@@ -66,6 +66,8 @@ static struct timer_list topology_timer; ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 @@ ...@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment