s390/smp: perform initial CPU reset also for SMT siblings
authorSven Schnelle <svens@linux.ibm.com>
Tue, 8 Dec 2020 06:35:21 +0000 (07:35 +0100)
committerHeiko Carstens <hca@linux.ibm.com>
Wed, 9 Dec 2020 20:02:08 +0000 (21:02 +0100)
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: 10ad34bc76dfb ("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>
arch/s390/kernel/smp.c

index 647226e50c80a62cd837119e091898822169dc95..27c7630141148a16a3de203be2228994415ed959 100644 (file)
@@ -890,24 +890,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;