scheduler (sched_4bsd) questions
Stephan Uphoff
ups at tree.com
Thu Sep 30 21:18:27 PDT 2004
On Wed, 2004-09-29 at 18:14, Stephan Uphoff wrote:
> I was looking at the MUTEX_WAKE_ALL undefined case when I used the
> critical section for turnstile_claim().
> However there are bigger problems with MUTEX_WAKE_ALL undefined
> so you are right - the critical section for turnstile_claim is pretty
> useless.
Arghhh !!!
MUTEX_WAKE_ALL is NOT an option in GENERIC.
I recall verifying that it is defined twice. Guess I must have looked at
the wrong source tree :-(
This means yes - we have bigger problems!
Example:
Thread A holds a mutex x contested by Thread B and C and has priority
pri(A).
Thread C holds a mutex y and pri(B) < pri(C)
Thread A releases the lock wakes thread B but lets C on the turnstile
wait queue.
An interrupt thread I tries to lock mutex y owned by C.
However priority inheritance does not work since B needs to run first to
take ownership of the lock.
I is blocked :-(
This was found using Peter Holm's test and a slight modification of this
giant hog detector. (kern_clock.diff)
I definitely won't have time to fix kern_mutex.c for the next few days
so please add the line:
options MUTEX_WAKE_ALL # Needed do not remove
to your configuration files.
I also had overlooked
http://www.holm.cc/stress/log/cons80.html
Showing that my patch for kern_switch.c (switch_patch) has a bug.
I will send an updated patch later today.
Stephan
PS: I love the firewire debugging speed!
More information about the freebsd-arch
mailing list