Thread (20 messages) 20 messages, 3 authors, 2015-01-14

Re: [PATCH 3/7] wait.[ch]: Introduce the simple waitqueue (swait) implementation

From: Steven Rostedt <rostedt@goodmis.org>
Date: 2014-10-18 23:06:42
Also in: lkml

On Sat, 2014-10-18 at 23:34 +0200, Peter Zijlstra wrote:
Same comment as before, that is an unbounded loop in a non preemptible
section and therefore violates RT design principles.

We actually did talk about ways of fixing that.
Right, and we should slap Paul for not showing up for it ;-)

The decision that we came up with was to splice the current list onto a
local list variable. And then we could go into a loop releasing the lock
and grabbing it again. Each time pop a waiter off the list and doing the
work of only one task at a time. This prevents doing large amounts of
wake ups under a spinlock. The splice is required to only wake up those
that are on the list when the wake up is called. This prevents waking up
a task twice because it woke up, removed itself, and then added itself
again. We must keep the semantics that a wake up only wakes up a task
once.
Also, I'm not entirely sure we want to do the cwait thing, it looks
painful.
Yeah, I have to think about that some more too. I'm currently sitting in
the airport waiting for my final leg of my flight. After 18 hours of
travel, it is probably not too wise to review this work in my current
state ;-)

-- Steve
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help