Re: [PATCH v3 1/6] rtmutex: Deboost before waking up the top waiter

From: Xunlei Pang
Date: Mon Apr 18 2016 - 04:45:14 EST


On 2016/04/18 at 16:23, Thomas Gleixner wrote:
> On Thu, 14 Apr 2016, Xunlei Pang wrote:
>> We should deboost before waking the high-prio task such that
>> we don't run two tasks with the 'same' priority.
> No. This is fundamentaly broken.
>
> T1 (prio 0) lock(X)
>
> --> preemption
>
> T2 (prio 10) lock(X)
> boost(T1)
> schedule()
>
> T1 (prio 10) unlock(X)

We add a preempt_disable() before deboost to avoid the breakage,
there's also some comment about this in the patch's code.

Regards,
Xunlei

> deboost()
> (prio 0)
>
> --> preemption
>
> T3 (prio 5) ....
>
> Classic priority inversion enabled by a mechanism to avoid it. Brilliant
> stuff.
>
> Thanks,
>
> tglx