On Mon, 2023-03-20 at 08:17 +0000, David Woodhouse wrote: > > In _cpu_up() the call to idle_thread_get() only happens if the CPU in > question is starting from CPUHP_OFFLINE but I think that's sufficient? > > diff --git a/kernel/cpu.c b/kernel/cpu.c > index 6c0a92ca6bb5..43e0a77f21e8 100644 > --- a/kernel/cpu.c > +++ b/kernel/cpu.c > @@ -591,12 +591,6 @@ static int bringup_cpu(unsigned int cpu) >   struct task_struct *idle = idle_thread_get(cpu); >   int ret; >   > - /* > - * Reset stale stack state from the last time this CPU was online. > - */ > - scs_task_reset(idle); > - kasan_unpoison_task_stack(idle); > - >   /* >   * Some architectures have to walk the irq descriptors to >   * setup the vector space for the cpu which comes online. > @@ -1383,6 +1377,12 @@ static int _cpu_up(unsigned int cpu, int tasks_frozen, enum cpuhp_state target) >   ret = PTR_ERR(idle); >   goto out; >   } > + > + /* > + * Reset stale stack state from the last time this CPU was online. > + */ > + scs_task_reset(idle); > + kasan_unpoison_task_stack(idle); >   } >   >   cpuhp_tasks_frozen = tasks_frozen; I put that into a separate commit, rebased on tip/x86/apic and pushed it out with the rest of the changes to https://git.infradead.org/users/dwmw2/linux.git/shortlog/refs/heads/parallel-6.2-rc3-v16 I'll let Usama do another round of testing and repost it (please). Thanks!