Thread (30 messages) 30 messages, 9 authors, 2021-06-18

Re: [PATCH 1/6] sched: Unbreak wakeups

From: Davidlohr Bueso <dave@stgolabs.net>
Date: 2021-06-02 19:44:21
Also in: dm-devel, kvm, linux-block, linux-fsdevel, linux-mm, linux-perf-users, linux-pm, linux-usb, lkml, netdev, rcu

On Wed, 02 Jun 2021, Peter Zijlstra wrote:
Remove broken task->state references and let wake_up_process() DTRT.

The anti-pattern in these patches breaks the ordering of ->state vs
COND as described in the comment near set_current_state() and can lead
to missed wakeups:

(OoO load, observes RUNNING)<-.
for (;;) {                    |
  t->state = UNINTERRUPTIBLE; |
  smp_mb();          ,-----> ,' (OoO load, observed !COND)
                            |       |
                     |       |	COND = 1;
		     |	     `- if (t->state != RUNNING)
                            |		  wake_up_process(t); // not done
  if (COND) ---------'
    break;
  schedule(); // forever waiting
}
t->state = TASK_RUNNING;

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Davidlohr Bueso <redacted>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help