On Mon, 31 Jan 2022 14:55:09 +0100 David Hildenbrand <david@xxxxxxxxxx> wrote: > On 28.01.22 19:54, Claudio Imbrenda wrote: > > Guarantee that the boot CPU has index 0. This simplifies the > > implementation of tests that require multiple CPUs. > > > > Also fix a small bug in the allocation of the cpus array. > > > > Signed-off-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx> > > Fixes: f77c0515 ("s390x: Add initial smp code") > > Fixes: 52076a63 ("s390x: Consolidate sclp read info") > > --- > > lib/s390x/smp.c | 16 ++++++++-------- > > 1 file changed, 8 insertions(+), 8 deletions(-) > > > > diff --git a/lib/s390x/smp.c b/lib/s390x/smp.c > > index 64c647ec..01f513f0 100644 > > --- a/lib/s390x/smp.c > > +++ b/lib/s390x/smp.c > > @@ -25,7 +25,6 @@ > > #include "sclp.h" > > > > static struct cpu *cpus; > > -static struct cpu *cpu0; > > static struct spinlock lock; > > > > extern void smp_cpu_setup_state(void); > > @@ -81,7 +80,7 @@ static int smp_cpu_stop_nolock(uint16_t addr, bool store) > > uint8_t order = store ? SIGP_STOP_AND_STORE_STATUS : SIGP_STOP; > > > > cpu = smp_cpu_from_addr(addr); > > - if (!cpu || cpu == cpu0) > > + if (!cpu || addr == cpus[0].addr) > > return -1; > > > > if (sigp_retry(addr, order, 0, NULL)) > > @@ -205,7 +204,7 @@ int smp_cpu_setup(uint16_t addr, struct psw psw) > > sigp_retry(cpu->addr, SIGP_SET_PREFIX, (unsigned long )lc, NULL); > > > > /* Copy all exception psws. */ > > - memcpy(lc, cpu0->lowcore, 512); > > + memcpy(lc, cpus[0].lowcore, 512); > > > > /* Setup stack */ > > cpu->stack = (uint64_t *)alloc_pages(2); > > @@ -263,15 +262,16 @@ void smp_setup(void) > > if (num > 1) > > printf("SMP: Initializing, found %d cpus\n", num); > > > > - cpus = calloc(num, sizeof(cpus)); > > + cpus = calloc(num, sizeof(*cpus)); > > for (i = 0; i < num; i++) { > > cpus[i].addr = entry[i].address; > > cpus[i].active = false; > > if (entry[i].address == cpu0_addr) { > > - cpu0 = &cpus[i]; > > - cpu0->stack = stackptr; > > - cpu0->lowcore = (void *)0; > > - cpu0->active = true; > > + cpus[i].addr = cpus[0].addr; > > Might deserve a comment that we'll move the the boot CPU to index 0. fair enough. > > What's the expected behavior if i == 0? > in that case, the boot CPU was already the one with index 0. The code will do a few extra useless steps, but in the end everything should Just Work™