> +#include <linux/sched/mm.h> > #include <asm/irq.h> > #include <asm/mmu_context.h> > #include <asm/tlbflush.h> > @@ -79,8 +80,8 @@ int __cpu_up(unsigned int cpu, struct task_struct *tidle) > * the spinning harts that they can continue the boot process. > */ > smp_mb(); > - __cpu_up_stack_pointer[cpu] = task_stack_page(tidle) + THREAD_SIZE; > - __cpu_up_task_pointer[cpu] = tidle; > + WRITE_ONCE(__cpu_up_stack_pointer[cpu], task_stack_page(tidle) + > THREAD_SIZE); > + WRITE_ONCE(__cpu_up_task_pointer[cpu], tidle);
This looks unrelated. > @@ -100,7 +101,7 @@ asmlinkage void __init smp_callin(void) > struct mm_struct *mm = &init_mm; > > /* All kernel threads share the same mm context. */ > - atomic_inc(&mm->mm_count); > + mmgrab(mm); > current->active_mm = mm; This part looks fine to me: Reviewed-by: Christoph Hellwig <h...@lst.de>