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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





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
task.

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.

I
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
review.

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

Esben


  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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux