Re: [PATCH 4/4] exit: Lockless iteration over task list in mm_update_next_owner()

From: Peter Zijlstra
Date: Thu Apr 26 2018 - 11:21:55 EST


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?