Re: [PATCH] rtmutex: ensure only the top waiter or higher prioritytask can take the lock and reduce unrelated boosting

From: Thomas Gleixner
Date: Wed Dec 15 2010 - 09:53:29 EST


On Wed, 15 Dec 2010, Lai Jiangshan wrote:
> On Wed, Dec 15, 2010 at 8:07 PM, Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote:
> > On Wed, 15 Dec 2010, Lai Jiangshan wrote:
> >> +     if (waiter || rt_mutex_has_waiters(lock)) {
> >> +             unsigned long flags;
> >> +             struct rt_mutex_waiter *top;
> >> +
> >> +             raw_spin_lock_irqsave(&task->pi_lock, flags);
> >> +
> >> +             /* remove the queued waiter. */
> >> +             if (waiter) {
> >> +                     plist_del(&waiter->list_entry, &lock->wait_list);
> >> +                     task->pi_blocked_on = NULL;
> >> +             }
> >> +
> >> +             /*
> >> +              * We have to enqueue the top waiter(if have) into
> >> +              * task->pi_waiters list and would get boost from it.
> >
> > No, we don't get boosted from it. We just have to enqueue it into
> > pi_waiters list. There is no boosting happening at this point. Please
> > be very careful with the comments in this code.
> >
> > Otherwise this looks really interesting. Still this wants to be ported
> > to -rt and stress tested there.
> >
>
> Hi, Thomas,
>
> Where can I find the code of stress testcases?

RT itself will stress test the rtmutex code as much as it goes as we
convert almost every lock into a rtmutex there.

Steven, could you have a look at that ?

Thanks,

tglx