Re: [PATCH v14 10/12] x86/smpboot: Send INIT/SIPI/SIPI to secondary CPUs in parallel

From: David Woodhouse
Date: Sat Mar 11 2023 - 04:56:34 EST


On Sat, 2023-03-11 at 10:54 +0200, Thomas Gleixner wrote:
> On Wed, Mar 08 2023 at 17:13, Usama Arif wrote:
> >  
> > +/* Bringup step one: Send INIT/SIPI to the target AP */
> > +static int native_cpu_kick(unsigned int cpu)
> > +{
> > +       return do_cpu_up(cpu, idle_thread_get(cpu));
>
> This idle_thread_get() is not sufficient. bringup_cpu() does:
>
>         struct task_struct *idle = idle_thread_get(cpu);
>
>         /*
>          * Reset stale stack state from the last time this CPU was online.
>          */
>         scs_task_reset(idle);
>         kasan_unpoison_task_stack(idle);
>
> But with this new model neither the shadow stack gets reset nor the
> kasan unpoisoning happens _before_ the to be kicked CPU starts
> executing.
>
> That needs a new function which does the get() and the above.

Ah, good catch. Those were added after we started on this journey :)

I think I'll do it with a 'bool unpoison' argument to
idle_thread_get(). Or just make it unconditional; they're idempotent
anyway and cheap enough? Kind of weird to be doing it from finish_cpu()
though, so I'll probably stick with the argument.


....*types*....

Erm, there are circumstances (!CONFIG_GENERIC_SMP_IDLE_THREAD) when
idle_thread_get() just unconditionally returns NULL.

At first glance, it doesn't look like scs_task_reset() copes with being
passed a NULL. Am I missing something?

$ grep -c GENERIC_SMP_IDLE_THREAD `grep -l SMP arch/*/Kconfig`
arch/alpha/Kconfig:1
arch/arc/Kconfig:1
arch/arm64/Kconfig:1
arch/arm/Kconfig:1
arch/csky/Kconfig:1
arch/hexagon/Kconfig:1
arch/ia64/Kconfig:1
arch/loongarch/Kconfig:1
arch/mips/Kconfig:1
arch/openrisc/Kconfig:1
arch/parisc/Kconfig:1
arch/powerpc/Kconfig:1
arch/riscv/Kconfig:1
arch/s390/Kconfig:1
arch/sh/Kconfig:1
arch/sparc/Kconfig:1
arch/um/Kconfig:0
arch/x86/Kconfig:1
arch/xtensa/Kconfig:1

Maybe just nobody but UM cares?

Attachment: smime.p7s
Description: S/MIME cryptographic signature