Re: [patch 3/3] [-rt] Fixes the timeout-bug in the rtmutex/PI-futex.

From: Esben Nielsen
Date: Sun Jul 23 2006 - 11:58:05 EST

On Sun, 23 Jul 2006, Steven Rostedt wrote:

On Sun, 2006-07-23 at 02:18 +0100, Esben Nielsen wrote:
This patch fixes

1) The timeout bug in rtmutexes and PI futexes: When a task is blocked on a
lock with timeout and times out it will not wakeup until the owner of the lock
is done. This is because the owner is boosted to the same priority as the
blocked task and therefore has the CPU such the blocked task never gets around
to de-boost it!

2) setscheduler() now does the PI walking - but defers the work to the blocked

3) In general it makes sure that a task, which is boosting another has enough
priority to do the de-boosting no matter how complicated the lock structure is,
or how many times the priorities have changed.

The idea behind the patch is simple:
If a task is boosting another it is scheduled in LIFO order and it will never
loose it's priority. This property lasts until it has left the lock operation
(successfully or not).

The needed priority to do the unboosting is stored in task->boosting_prio.
In the current patch this is always increasing (numerically decreasing) while
trying to take a lock. In a future it might be found safe to decrease
boosting_prio before finally leaving the lock operation.

include/linux/rtmutex.h | 1
include/linux/sched.h | 7
kernel/fork.c | 1
kernel/rtmutex.c | 151 +++++++++++++-----

It is possible that these changes can break the pi code in rtmutex.c.

Hmm, I am quite confident this one doesn't :-) It is tested against my own
user-space unit tester and against Thomas's in-kernel rt-tester. And my stress PriorityInheritanceTest by the way.

haven't analyzed it enough yet. But just so that you know that your
changes don't break the code, and to make it easier for me to look at
it. Please update Documentation/rt-mutex-design.txt including your
changes. This will be a good exercise to see if it doesn't really break
anything, and it will give other reviewers a better starting point for

Is that up-to-date in the -rt tree? The last patch you sent was to 2.6.18-rc2, right?


kernel/rtmutex_common.h | 1
kernel/sched.c | 14 +
scripts/rt-tester/t5-l4-pi-boost-deboost-setsched.tst | 42 +++--
scripts/rt-tester/t5-l4-pi-boost-deboost.tst | 12 -
8 files changed, 167 insertions(+), 62 deletions(-)

-- 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
Please read the FAQ at