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)) {
                ...
        }

        -ss

Reply via email to