Re: [patch V2 9/9] tasklets: Prevent kill/unlock_wait deadlock on RT

From: Thomas Gleixner
Date: Mon Dec 07 2020 - 12:57:06 EST


On Mon, Dec 07 2020 at 15:27, Peter Zijlstra wrote:

> On Mon, Dec 07, 2020 at 03:00:40PM +0100, Sebastian Andrzej Siewior wrote:
>> On 2020-12-07 12:47:43 [+0100], Peter Zijlstra wrote:
>> > On Fri, Dec 04, 2020 at 06:02:00PM +0100, Thomas Gleixner wrote:
>> > > @@ -825,7 +848,20 @@ void tasklet_kill(struct tasklet_struct
>> > >
>> > > while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) {
>> > > do {
>> > > - yield();
>> > > } while (test_bit(TASKLET_STATE_SCHED, &t->state));
>> > > }
>> > > tasklet_unlock_wait(t);
>> >
>> >
>> > Egads... should we not start by doing something like this?
>>
>> So we keep the RT part as-is and replace the non-RT bits with this?
>
> For RT you probably want to wrap the wait_var_event() in that
> local_bh_disable()/enable() pear.

Is that a new species local to the Netherlands? Never heard about
bh-pears before. Are they tasty?

> I just figured those unbounded spin/yield loops suck and we should get
> rid of em.

Ack.