Loading arch/s390/kernel/topology.c +18 −3 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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); Loading Loading @@ -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); Loading include/asm-s390/topology.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -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); Loading Loading
arch/s390/kernel/topology.c +18 −3 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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); Loading Loading @@ -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); Loading
include/asm-s390/topology.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -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); Loading