priority inherence bug?

Joel Sherrill joel.sherrill at OARcorp.com
Wed Dec 3 14:24:34 UTC 2008


xi yang wrote:
> On Wed, Dec 3, 2008 at 9:43 PM, Joel Sherrill <joel.sherrill at oarcorp.com> wrote:
>   
>> Thanks for the through answer.
>>
>> I would only add that the default and historic behaviour
>> Manuel describes is documented and was selected
>> since it was a simple solution which did not require
>> tracking.  See the third paragraph here.
>>
>> http://www.rtems.org/onlinedocs//doc-current/share/rtems/html/c_user/c_user00162.html
>>
>> We did not switch to strict order by default when it
>> was submitted because of two concerns.  First as a change
>> to existing behaviour, it could have broken applications
>> in a subtle way.  Second, it was new code and needed time.
>>     
> Sorry, I didn't update the onlinedocs when I submitted the patch.
>   
It needs to be documented for sure. :(
> I think strict order may broke latency codes in two ways 1)It dosenot
> release mutex in LIFO order 2)It assumes that it still in a higher
> priority when it releases one of the mutex.
> For 1), Releasing mutex without LIFO order may leads to deadlock. So,
> breaking them is OK.
>   
I think enforcing that the release order is the opposite
of the acquire order is OK.  Bad programming practice to
do otherwise since it can lead to a deadly embrace.
> For 2), maybe some programmers read the manual and do it like that :)
>   
I don't understand the issue for 2).

--joel
> Regards
>   
>> It may be time to switch the default to using it and
>> getting time on the code so it is the default in 4.10.
>>
>> We can then consider killing the old behaviour in 4.11.
>>
>> It is important to be cautious when changing something like
>> this.
>>
>> --joel
>>
>> xi yang wrote:
>>     
>>> On Wed, Dec 3, 2008 at 7:51 PM, Manuel <manuel.coutinho at edisoft.pt> wrote:
>>>
>>>       
>>>> Hi
>>>>
>>>> We are doing some tests to RTEMS and have stumbled in a possible bug when
>>>> semaphores with priority inherence are used.
>>>>
>>>> Suppose a low priority task obtains two semaphores with priority
>>>> inherence.
>>>> After it obtains the critical region, other higher priority tasks also
>>>> try
>>>> to obtain the semaphores.
>>>> We have tested that the priority of the lower priority task is correctly
>>>> raised to the priority of the highest priority task that tries to obtain
>>>> the
>>>> semaphore. However, when the low priority task releases the first
>>>> semaphore,
>>>> its priority should decrease (because the second semaphore is only used
>>>> by
>>>> middle priority tasks). The priority of the lower priority task is only
>>>> restored to its original when it released the two semaphores.
>>>>
>>>>         
>>> So, you want that if the task releases the mutex as LIFO order, just
>>> restore the priority of the task to the previous priority. You can
>>> enable the strict order function. In
>>> rtems-4.9.0/testsuites/sptests/sp36/sp36.doc, it write
>>> This is a simple test program to demonstrate strict order mutex.
>>>
>>> 1)What's strict order mutex ?
>>>
>>>  In rtems,when a task release a priority_inheritance or
>>>  priority ceiling semaphore,the kernel detect whether
>>>  this task holds priority_inheritance or priority
>>>  ceiling semaphore, if not, set the priority of task
>>>  back to real priority of task.
>>>  This method  is right, but in theory, we would like
>>>  to reset the priority after releasing the mutex if
>>>  releasing it in LIFO order.Do it like this can decrease
>>>  the blocking time of a higher priority task .
>>>
>>> 2)How to enable "strict order mutex " ?
>>>
>>>  When configuring the rtems , add
>>>  ENABLE_STRICT_ORDER_MUTEX=1
>>>  to your configure parameter.
>>>
>>>
>>> 3)About this test program
>>>
>>>  T0,T1,S0,S1
>>>
>>>  T0,priority 4
>>>  T1,priority 1
>>>
>>>  S0,priority inheritance
>>>  S1,priority ceiling,priority ceiling 1
>>>
>>>  1,T0 obtain S0 then obtain S1, priority of T0 should be improved to 1
>>>  2,T0 try to release S0, but not in strict order, return error code
>>>  3,T0 release S1,the priority of T0 back to 4
>>>  4,T1 try to obtain S0
>>>  5,T1 should be blocked and the priority of T0 should be improved to 1
>>>  6,T0 release S0
>>>  7,T1 obtain S0
>>>  8,OVER.
>>>
>>> Regards
>>>
>>>       
>>>> In our opinion, this is not the correct behavior of priority inherence
>>>> semaphores. We will try to correct this bug.
>>>>
>>>> Kind regards
>>>> Manuel Coutinho
>>>>
>>>>
>>>> _______________________________________________
>>>> rtems-users mailing list
>>>> rtems-users at rtems.com
>>>> http://rtems.rtems.org/mailman/listinfo/rtems-users
>>>>
>>>>
>>>>         
>>> _______________________________________________
>>> rtems-users mailing list
>>> rtems-users at rtems.com
>>> http://rtems.rtems.org/mailman/listinfo/rtems-users
>>>
>>>       
>> --
>> Joel Sherrill, Ph.D.             Director of Research & Development
>> joel.sherrill at OARcorp.com        On-Line Applications Research
>> Ask me about RTEMS: a free RTOS  Huntsville AL 35805
>>  Support Available             (256) 722-9985
>>
>>
>>
>>     


-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel.sherrill at OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
   Support Available             (256) 722-9985





More information about the users mailing list