Re: [RFC PATCH] sched/wait: Introduce new, more compact wait_event*() primitives
From: Linus Torvalds
Date: Wed Mar 08 2017 - 11:39:00 EST
On Wed, Mar 8, 2017 at 12:37 AM, Ingo Molnar <mingo@xxxxxxxxxx> wrote:
>
> The idea is to allow call sites to supply the 'condition' function as free-form C
> code, while pushing everything else into non-macro form: there's a 'struct
> wait_event_state' on stack, and a state machine. The waiting logic is converted
> from procedural form to a state machine, because we have to call out into the
> 'condition' code in different circumstances.
Ok, I think the concept is fine, but you don't actually fix the
problem with the locked version that needs to unlock (with irq
versions etc) around the schedule.
And using "bool" in a struct is disgusting and wrong, and hides the
fact that the compiler will just turn it into "char" (or even "int"
for platforms where "char'" is slow, like alpha).
So it would be better with a "state" variable that just has fields, I suspect.
.. and as mentioned, it doesn't actually fix the case that hit the
signal_pending() problem.
Honestly, I think my "pass in a waiter function" model was both less
subtle and indirect, and more generic.
And we can actually *fix* the problem with it for 4.11, instead of
adding the stupid header file includes.
Linus