On 09/01/2020 10:52, Jan Beulich wrote: >>>> --- a/xen/arch/x86/smpboot.c >>>> +++ b/xen/arch/x86/smpboot.c >>>> @@ -554,7 +554,7 @@ static int do_boot_cpu(int apicid, int cpu) >>>> printk("Booting processor %d/%d eip %lx\n", >>>> cpu, apicid, start_eip); >>>> >>>> - stack_start = stack_base[cpu]; >>>> + stack_start = stack_base[cpu] + STACK_SIZE - sizeof(struct cpu_info); >>>> >>>> /* This grunge runs the startup process for the targeted processor. */ >>> Further down smp_prepare_cpus() has >>> >>> stack_base[0] = stack_start; >>> >>> which I think you need to also adjust (or replace, e.g. by giving >>> stack_base[] an initializer). >> In practice, this variable is never used because we never offline the BSP. > traps.c uses stack_base[], for example, and hence it needs to be > correct also for the BSP. Even more important is perhaps > get_cpu_current()'s use. > >> However, the code as-is is correct. The value in stack_start has >> changed in this patch, but is still the correct value for the BSP. > But it's no longer the stack base (which is what stack_base[] holds > for all other CPUs), or else you wouldn't have had a need to change > do_boot_cpu().
Oh - of course. I'm being dense. To avoid a move into data, lets just go with & ~(STACK_SIZE - 1) here. ~Andrew _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel