| From 0044965180ba15f1a5984d6eca19850afd7cb838 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 20 Oct 2025 16:17:54 +0200 |
| Subject: s390/smp: Fix fallback CPU detection |
| |
| From: Heiko Carstens <hca@linux.ibm.com> |
| |
| [ Upstream commit 07a75d08cfa1b883a6e1256666e5f0617ee99231 ] |
| |
| In case SCLP CPU detection does not work a fallback mechanism using SIGP is |
| in place. Since a cleanup this does not work correctly anymore: new CPUs |
| are only considered if their type matches the boot CPU. |
| |
| Before the cleanup the information if a CPU type should be considered was |
| also part of a structure generated by the fallback mechanism and indicated |
| that a CPU type should not be considered when adding CPUs. |
| |
| Since the rework a global SCLP state is used instead. If the global SCLP |
| state indicates that the CPU type should be considered and the fallback |
| mechanism is used, there may be a mismatch with CPU types if CPUs are |
| added. This can lead to a system with only a single CPU even tough there |
| are many more CPUs. |
| |
| Address this by simply copying the boot cpu type into the generated data |
| structure from the fallback mechanism. |
| |
| Reported-by: Alexander Egorenkov <egorenar@linux.ibm.com> |
| Fixes: d08d94306e90 ("s390/smp: cleanup core vs. cpu in the SCLP interface") |
| Reviewed-by: Mete Durlu <meted@linux.ibm.com> |
| Signed-off-by: Heiko Carstens <hca@linux.ibm.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/s390/kernel/smp.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c |
| index 436dbf4d743d8..8346cb75643ca 100644 |
| --- a/arch/s390/kernel/smp.c |
| +++ b/arch/s390/kernel/smp.c |
| @@ -758,6 +758,7 @@ static void __ref smp_get_core_info(struct sclp_core_info *info, int early) |
| continue; |
| info->core[info->configured].core_id = |
| address >> smp_cpu_mt_shift; |
| + info->core[info->configured].type = boot_core_type; |
| info->configured++; |
| } |
| info->combined = info->configured; |
| -- |
| 2.51.0 |
| |