Re: [PATCHv3 2/6] tty/ldsem: Update waiter->task before waking up reader

From: Peter Zijlstra
Date: Tue Sep 11 2018 - 07:44:58 EST


On Tue, Sep 11, 2018 at 02:41:29PM +0900, Sergey Senozhatsky wrote:
> On (09/11/18 14:04), Sergey Senozhatsky wrote:
> > > for (;;) {
> > > set_current_state(TASK_UNINTERRUPTIBLE);
> >
> > I think that set_current_state() also executes memory barrier. Just
> > because it accesses task state.
> >
> > > - if (!waiter.task)
> > > + if (!READ_ONCE(waiter.task))
> > > break;
> > > if (!timeout)
> > > break;
>
> This READ_ONCE(waiter.task) looks interesting. Maybe could be moved
> to a loop condition
>
> while (!READ_ONCE(waiter.task)) {
> ...
> }

No, it must be after set_current_state(). See that same comment.