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. What's the expected behavior if i == 0? -- Thanks, David / dhildenb