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 (!timeout) break;if (!READ_ONCE(waiter.task)) 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.