On Thu, Apr 26, 2018 at 04:52:39PM +0300, Kirill Tkhai wrote: > >> > >> 1)for_each_process(g) copy_process() > >> p->mm = mm > >> smp_rmb(); smp_wmb() implied by alloc_pid() > >> if (g->flags & PF_KTHREAD) list_add_tail_rcu(&p->tasks, > >> &init_task.tasks) > >> > >> 2)for_each_thread(g, c) copy_process() > >> p->mm = mm > >> smp_rmb(); smp_wmb() implied by alloc_pid() > >> tmp = READ_ONCE(c->mm) list_add_tail_rcu(&p->thread_node, ...)
For these two; what's the purpose of the smp_rmb()? which loads are ordered?