Initially Locked Priority Ceiling Semaphores

Gedare Bloom gedare at rtems.org
Wed May 21 15:01:59 UTC 2014


On Wed, May 21, 2014 at 10:41 AM, Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
> Hello,
>
> you can create a Classic API semaphore using the Priority Ceiling Protocol
> which is initially locked by the creating task.  In this case the creating
> task is not elevated to the ceiling priority:
>
> CORE_mutex_Status _CORE_mutex_Initialize(
>   CORE_mutex_Control           *the_mutex,
>   Thread_Control               *executing,
>   const CORE_mutex_Attributes  *the_mutex_attributes,
>   bool                          initially_locked
> )
> {
>
> /* Add this to the RTEMS environment later ?????????
>   rtems_assert( initial_lock == CORE_MUTEX_LOCKED ||
>                 initial_lock == CORE_MUTEX_UNLOCKED );
>  */
>
>   the_mutex->Attributes    = *the_mutex_attributes;
>
>   if ( initially_locked ) {
>     the_mutex->nest_count = 1;
>     the_mutex->holder     = executing;
>     if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
>          _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) {
>
>       if ( executing->current_priority <
>              the_mutex->Attributes.priority_ceiling )
>        return CORE_MUTEX_STATUS_CEILING_VIOLATED;
Looks like this check ensures the executing thread has got priority at
least at the priority_ceiling. If it does not, the mutex is not
initialized.

-Gedare
>
> Is this working as intended?
>
> --
> Sebastian Huber, embedded brains GmbH
>
> Address : Dornierstr. 4, D-82178 Puchheim, Germany
> Phone   : +49 89 189 47 41-16
> Fax     : +49 89 189 47 41-09
> E-Mail  : sebastian.huber at embedded-brains.de
> PGP     : Public key available on request.
>
> Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
> _______________________________________________
> rtems-devel mailing list
> rtems-devel at rtems.org
> http://www.rtems.org/mailman/listinfo/rtems-devel




More information about the devel mailing list