Re: [PATCH v2 1/3] rtmutex: update rt-mutex-design

From: Alex Shi
Date: Mon Apr 24 2017 - 09:40:13 EST




On 04/21/2017 11:47 PM, Peter Zijlstra wrote:
> On Fri, Apr 21, 2017 at 10:12:53PM +0800, Alex Shi wrote:
>> diff --git a/Documentation/locking/rt-mutex-design.txt b/Documentation/locking/rt-mutex-design.txt
>> index 8666070..11beb55 100644
>> --- a/Documentation/locking/rt-mutex-design.txt
>> +++ b/Documentation/locking/rt-mutex-design.txt
>> @@ -97,9 +97,9 @@ waiter - A waiter is a struct that is stored on the stack of a blocked
>> a process being blocked on the mutex, it is fine to allocate
>> the waiter on the process's stack (local variable). This
>> structure holds a pointer to the task, as well as the mutex that
>> - the task is blocked on. It also has the plist node structures to
>> - place the task in the waiter_list of a mutex as well as the
>> - pi_list of a mutex owner task (described below).
>> + the task is blocked on. It also has a rbtree node structures to
>> + place the task in waiters rbtree of a mutex as well as the
>> + pi_waiters rbtree of a mutex owner task (described below).
>
> whitespace fail

Keep using the old style. Thanks!

>
>>
>> waiter is sometimes used in reference to the task that is waiting
>> on a mutex. This is the same as waiter->task.
>> @@ -179,53 +179,35 @@ again.
>> |
>> F->L5-+
>>
>> +If the G process has highest priority in the chain, then all the tasks up
>> +the chain (A and B in this example), must have their priorities increased
>> +to that of G.
>
> No, only the top task that's actually runnable needs to be modified. The
> rest we don't care about because they're blocked.

As my understand the task B is also changed in function rt_mutex_adjust_prio_chain, even it was blocked. Since it should be run and then release the lock L2 before task G.

>
>> +Since the pi_waiters of a task holds an order by priority of all the top waiters
>> +of all the mutexes that the task owns, rt_mutex_getprio simply needs to compare
>> +the top pi waiter to its own normal priority, and return the higher priority
>> +back.
>
> rt_mutex_getprio() doesn't exist.

Thanks. Fixed.

>
>> +The main operation of this function is summarized by Thomas Gleixner in
>> +rtmutex.c. See the 'Chain walk basics and protection scope' comment for further
>> +details.
>
> Since all the useful bits are there anyway, why keep this document
> around at all?
>

Uh, we already removed much contents of this function. The remain part are not simple duplicated, and also give me much help when I try to understand the rtmutex. :)

Any comments for 3rd version? :)

Thanks!