mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 05:55:44 +02:00
s390/smp: perform initial CPU reset also for SMT siblings
commitb5e438ebd7upstream. Not resetting the SMT siblings might leave them in unpredictable state. One of the observed problems was that the CPU timer wasn't reset and therefore large system time values where accounted during CPU bringup. Cc: <stable@kernel.org> # 4.0 Fixes:10ad34bc76("s390: add SMT support") Reviewed-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Sven Schnelle <svens@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
bb9dc2f2e5
commit
0063e1142a
|
|
@ -896,24 +896,12 @@ static void __no_sanitize_address smp_start_secondary(void *cpuvoid)
|
|||
/* Upping and downing of CPUs */
|
||||
int __cpu_up(unsigned int cpu, struct task_struct *tidle)
|
||||
{
|
||||
struct pcpu *pcpu;
|
||||
int base, i, rc;
|
||||
struct pcpu *pcpu = pcpu_devices + cpu;
|
||||
int rc;
|
||||
|
||||
pcpu = pcpu_devices + cpu;
|
||||
if (pcpu->state != CPU_STATE_CONFIGURED)
|
||||
return -EIO;
|
||||
base = smp_get_base_cpu(cpu);
|
||||
for (i = 0; i <= smp_cpu_mtid; i++) {
|
||||
if (base + i < nr_cpu_ids)
|
||||
if (cpu_online(base + i))
|
||||
break;
|
||||
}
|
||||
/*
|
||||
* If this is the first CPU of the core to get online
|
||||
* do an initial CPU reset.
|
||||
*/
|
||||
if (i > smp_cpu_mtid &&
|
||||
pcpu_sigp_retry(pcpu_devices + base, SIGP_INITIAL_CPU_RESET, 0) !=
|
||||
if (pcpu_sigp_retry(pcpu, SIGP_INITIAL_CPU_RESET, 0) !=
|
||||
SIGP_CC_ORDER_CODE_ACCEPTED)
|
||||
return -EIO;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user