priority inherence bug?

xi yang hiyangxi at gmail.com
Wed Dec 3 12:39:28 UTC 2008


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
>



More information about the users mailing list