s390/smp: fix sigp cpu detection loop
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 17 Jun 2015 08:45:31 +0000 (10:45 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 25 Jun 2015 07:39:24 +0000 (09:39 +0200)
On a (theoretical) system where the read-cpu-info SCLP command does
not work but SMT is enabled, the sigp detection loop may not find
all configured cores. The maximum CPU address needs to be shifted
with smp_cpu_mt_shift.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/smp.c

index 0d9d59d..b3f1e9b 100644 (file)
@@ -658,7 +658,8 @@ static struct sclp_cpu_info *smp_get_cpu_info(void)
        info = kzalloc(sizeof(*info), GFP_KERNEL);
        if (info && (use_sigp_detection || sclp_get_cpu_info(info))) {
                use_sigp_detection = 1;
-               for (address = 0; address <= MAX_CPU_ADDRESS;
+               for (address = 0;
+                    address <= (MAX_CPU_ADDRESS << smp_cpu_mt_shift);
                     address += (1U << smp_cpu_mt_shift)) {
                        if (__pcpu_sigp_relax(address, SIGP_SENSE, 0, NULL) ==
                            SIGP_CC_NOT_OPERATIONAL)