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