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

From: Steven Rostedt
Date: Sat Oct 18 2014 - 19:06:55 EST


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


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/