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

Joel Sherrill joel at rtems.org
Fri Apr 16 16:01:22 UTC 2021


Allways -> Always

:)

On Fri, Apr 16, 2021 at 9:04 AM Gedare Bloom <gedare at rtems.org> wrote:

> 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
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20210416/4ae2226e/attachment.html>


More information about the devel mailing list