[PATCH] score: Allways check if a prio ceiling is defined

Gedare Bloom gedare at rtems.org
Fri Apr 16 14:04:13 UTC 2021


ok. also good if you want to open a ticket and backport to 5.

On Fri, Apr 16, 2021 at 1:30 AM Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
>
> Priority ceiling semaphores (in contrast to MrsP semaphores) have only
> one priority ceiling which is defined for the home scheduler of the task
> which created the semaphore.  Always check during a semaphore seize that
> the home scheduler of the calling task is equal to this scheduler.
>
> This avoids a scheduler mismatch if the semphore is acquired after the
> calling thread blocked on the semaphore.
> ---
>  cpukit/include/rtems/score/coremuteximpl.h | 20 ++++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/cpukit/include/rtems/score/coremuteximpl.h b/cpukit/include/rtems/score/coremuteximpl.h
> index cbc1e720fb..6b5c240105 100644
> --- a/cpukit/include/rtems/score/coremuteximpl.h
> +++ b/cpukit/include/rtems/score/coremuteximpl.h
> @@ -475,19 +475,19 @@ RTEMS_INLINE_ROUTINE Status_Control _CORE_ceiling_mutex_Seize(
>
>    _CORE_mutex_Acquire_critical( &the_mutex->Recursive.Mutex, queue_context );
>
> -  owner = _CORE_mutex_Get_owner( &the_mutex->Recursive.Mutex );
> -
> -  if ( owner == NULL ) {
>  #if defined(RTEMS_SMP)
> -    if (
> -      _Thread_Scheduler_get_home( executing )
> -        != _CORE_ceiling_mutex_Get_scheduler( the_mutex )
> -    ) {
> -      _CORE_mutex_Release( &the_mutex->Recursive.Mutex, queue_context );
> -      return STATUS_NOT_DEFINED;
> -    }
> +  if (
> +    _Thread_Scheduler_get_home( executing )
> +      != _CORE_ceiling_mutex_Get_scheduler( the_mutex )
> +  ) {
> +    _CORE_mutex_Release( &the_mutex->Recursive.Mutex, queue_context );
> +    return STATUS_NOT_DEFINED;
> +  }
>  #endif
>
> +  owner = _CORE_mutex_Get_owner( &the_mutex->Recursive.Mutex );
> +
> +  if ( owner == NULL ) {
>      _Thread_queue_Context_clear_priority_updates( queue_context );
>      return _CORE_ceiling_mutex_Set_owner(
>        the_mutex,
> --
> 2.26.2
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list