Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+18 −3
Original line number Original line Diff line number Diff line
@@ -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);


+4 −0
Original line number Original line Diff line number Diff line
@@ -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);