Re: Comment on 2.6.16-rt6 PI

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

 



On Sat, 25 Mar 2006, Thomas Gleixner wrote:

> On Sat, 2006-03-25 at 14:52 +0100, Esben Nielsen wrote:
>
> > In my test setup this leaves the owner->pi_waiters empty even though there
> > are waiters. I tried to move the removal of top_waiter inside the second
> > if statement but then a lot of other tests failed. I don't have time to
> > fix it.
>
> Can you please explain that more detailed how it happens ? And provide a
> test case ?
>

Sorry for the lack of details. I just thought the test-case wouldn't make
sense to you much and didn't paste it in. I was in a bit of a hurry too.
Now I have a little more time and can tell you what is going on:

top_waiter!=NULL
waiter!=NULL
waiter!=rt_mutex_top_waiter(lock)

Therefore one top_waiter is removed and but nothing is inserted.

Below is a fix.

Esben

> 	tglx
>
>
--- linux-2.6.16-rt6/kernel/rtmutex.c.orig	2006-03-25 19:14:35.000000000 +0100
+++ linux-2.6.16-rt6/kernel/rtmutex.c	2006-03-25 19:22:04.000000000 +0100
@@ -223,15 +223,22 @@ static void adjust_pi_chain(struct rt_mu
 	struct list_head *curr = lock_chain->prev;

 	for (;;) {
-		if (top_waiter)
+		if (top_waiter) {
 			plist_del(&top_waiter->pi_list_entry,
 				  &owner->pi_waiters);
-
-
-		if (waiter && waiter == rt_mutex_top_waiter(lock)) {
+		}
+
+		if (waiter) {
 			waiter->pi_list_entry.prio = waiter->task->prio;
-			plist_add(&waiter->pi_list_entry, &owner->pi_waiters);
 		}
+
+		if (rt_mutex_has_waiters(lock)) {
+			top_waiter = rt_mutex_top_waiter(lock);
+			plist_add(&top_waiter->pi_list_entry,
+				  &owner->pi_waiters);
+		}
+
+
 		adjust_prio(owner);

 		waiter = owner->pi_blocked_on;

-
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