s390/topology: remove offline CPUs from CPU topology masks
The CPU topology masks on s390 contain also bits of CPUs which are offline. Currently this is already a problem, since common code scheduler expects e.g. cpu_smt_mask() to reflect reality. This update changes the described behaviour and s390 starts to behave like all other architectures. Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com> Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
This commit is contained in:
parent
cd8e702f0d
commit
52aeda7acc
|
@ -43,6 +43,7 @@ int topology_cpu_init(struct cpu *);
|
|||
int topology_set_cpu_management(int fc);
|
||||
void topology_schedule_update(void);
|
||||
void store_topology(struct sysinfo_15_1_x *info);
|
||||
void update_cpu_masks(void);
|
||||
void topology_expect_change(void);
|
||||
const struct cpumask *cpu_coregroup_mask(int cpu);
|
||||
|
||||
|
@ -52,6 +53,7 @@ static inline void topology_init_early(void) { }
|
|||
static inline void topology_schedule_update(void) { }
|
||||
static inline int topology_cpu_init(struct cpu *cpu) { return 0; }
|
||||
static inline int topology_cpu_dedicated(int cpu_nr) { return 0; }
|
||||
static inline void update_cpu_masks(void) { }
|
||||
static inline void topology_expect_change(void) { }
|
||||
|
||||
#endif /* CONFIG_SCHED_TOPOLOGY */
|
||||
|
|
|
@ -858,12 +858,13 @@ static void smp_init_secondary(void)
|
|||
init_cpu_timer();
|
||||
vtime_init();
|
||||
pfault_init();
|
||||
notify_cpu_starting(smp_processor_id());
|
||||
notify_cpu_starting(cpu);
|
||||
if (topology_cpu_dedicated(cpu))
|
||||
set_cpu_flag(CIF_DEDICATED_CPU);
|
||||
else
|
||||
clear_cpu_flag(CIF_DEDICATED_CPU);
|
||||
set_cpu_online(smp_processor_id(), true);
|
||||
set_cpu_online(cpu, true);
|
||||
update_cpu_masks();
|
||||
inc_irq_stat(CPU_RST);
|
||||
local_irq_enable();
|
||||
cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
|
||||
|
@ -935,6 +936,7 @@ int __cpu_disable(void)
|
|||
/* Handle possible pending IPIs */
|
||||
smp_handle_ext_call();
|
||||
set_cpu_online(smp_processor_id(), false);
|
||||
update_cpu_masks();
|
||||
/* Disable pseudo page faults on this cpu. */
|
||||
pfault_fini();
|
||||
/* Disable interrupt sources via control register. */
|
||||
|
|
|
@ -88,6 +88,7 @@ static cpumask_t cpu_group_map(struct mask_info *info, unsigned int cpu)
|
|||
cpumask_copy(&mask, cpumask_of(cpu));
|
||||
break;
|
||||
}
|
||||
cpumask_and(&mask, &mask, cpu_online_mask);
|
||||
return mask;
|
||||
}
|
||||
|
||||
|
@ -103,6 +104,7 @@ static cpumask_t cpu_thread_map(unsigned int cpu)
|
|||
for (i = 0; i <= smp_cpu_mtid; i++)
|
||||
if (cpu_present(cpu + i))
|
||||
cpumask_set_cpu(cpu + i, &mask);
|
||||
cpumask_and(&mask, &mask, cpu_online_mask);
|
||||
return mask;
|
||||
}
|
||||
|
||||
|
@ -241,7 +243,7 @@ int topology_set_cpu_management(int fc)
|
|||
return rc;
|
||||
}
|
||||
|
||||
static void update_cpu_masks(void)
|
||||
void update_cpu_masks(void)
|
||||
{
|
||||
struct cpu_topology_s390 *topo;
|
||||
int cpu, id;
|
||||
|
|
Loading…
Reference in New Issue