Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e7086eb1 authored by Martin Schwidefsky's avatar Martin Schwidefsky
Browse files

s390/smp: fix sigp cpu detection loop



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: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent c50a160c
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -658,7 +658,8 @@ static struct sclp_cpu_info *smp_get_cpu_info(void)
	info = kzalloc(sizeof(*info), GFP_KERNEL);
	info = kzalloc(sizeof(*info), GFP_KERNEL);
	if (info && (use_sigp_detection || sclp_get_cpu_info(info))) {
	if (info && (use_sigp_detection || sclp_get_cpu_info(info))) {
		use_sigp_detection = 1;
		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)) {
		     address += (1U << smp_cpu_mt_shift)) {
			if (__pcpu_sigp_relax(address, SIGP_SENSE, 0, NULL) ==
			if (__pcpu_sigp_relax(address, SIGP_SENSE, 0, NULL) ==
			    SIGP_CC_NOT_OPERATIONAL)
			    SIGP_CC_NOT_OPERATIONAL)