[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