[PATCH 2/2] rtems: Simplify rtems_semaphore_set_priority()

Gedare Bloom gedare at rtems.org
Wed Mar 24 15:57:24 UTC 2021


these two patches look ok to me.

On Wed, Mar 24, 2021 at 1:40 AM Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
>
> Do not write to the object referenced by old_priority in error paths.
> This is in line with other directives.
> ---
>  cpukit/rtems/src/semsetpriority.c | 47 +++++++++++++++----------------
>  1 file changed, 22 insertions(+), 25 deletions(-)
>
> diff --git a/cpukit/rtems/src/semsetpriority.c b/cpukit/rtems/src/semsetpriority.c
> index 119dd85d77..97e53c6584 100644
> --- a/cpukit/rtems/src/semsetpriority.c
> +++ b/cpukit/rtems/src/semsetpriority.c
> @@ -29,20 +29,6 @@
>  #include <rtems/rtems/tasksimpl.h>
>  #include <rtems/score/schedulerimpl.h>
>
> -static rtems_status_code _Semaphore_Is_scheduler_valid(
> -  const CORE_ceiling_mutex_Control *the_mutex,
> -  const Scheduler_Control          *scheduler
> -)
> -{
> -#if defined(RTEMS_SMP)
> -  if ( scheduler != _CORE_ceiling_mutex_Get_scheduler( the_mutex ) ) {
> -    return RTEMS_NOT_DEFINED;
> -  }
> -#endif
> -
> -  return RTEMS_SUCCESSFUL;
> -}
> -
>  static rtems_status_code _Semaphore_Set_priority(
>    Semaphore_Control       *the_semaphore,
>    const Scheduler_Control *scheduler,
> @@ -51,7 +37,6 @@ static rtems_status_code _Semaphore_Set_priority(
>    Thread_queue_Context    *queue_context
>  )
>  {
> -  rtems_status_code  sc;
>    bool               valid;
>    Priority_Control   core_priority;
>    Priority_Control   old_priority;
> @@ -73,16 +58,26 @@ static rtems_status_code _Semaphore_Set_priority(
>
>    switch ( variant ) {
>      case SEMAPHORE_VARIANT_MUTEX_PRIORITY_CEILING:
> -      sc = _Semaphore_Is_scheduler_valid(
> -        &the_semaphore->Core_control.Mutex,
> -        scheduler
> -      );
> +#if defined(RTEMS_SMP)
> +      if (
> +        scheduler != _CORE_ceiling_mutex_Get_scheduler(
> +          &the_semaphore->Core_control.Mutex
> +        )
> +      ) {
> +        _Thread_queue_Release(
> +          &the_semaphore->Core_control.Wait_queue,
> +          queue_context
> +        );
> +
> +        return RTEMS_NOT_DEFINED;
> +      }
> +#endif
>
>        old_priority = _CORE_ceiling_mutex_Get_priority(
>          &the_semaphore->Core_control.Mutex
>        );
>
> -      if ( sc == RTEMS_SUCCESSFUL && new_priority != RTEMS_CURRENT_PRIORITY ) {
> +      if ( new_priority != RTEMS_CURRENT_PRIORITY ) {
>          _CORE_ceiling_mutex_Set_priority(
>            &the_semaphore->Core_control.Mutex,
>            core_priority
> @@ -105,7 +100,6 @@ static rtems_status_code _Semaphore_Set_priority(
>          );
>        }
>
> -      sc = RTEMS_SUCCESSFUL;
>        break;
>  #endif
>      default:
> @@ -115,9 +109,12 @@ static rtems_status_code _Semaphore_Set_priority(
>            || variant == SEMAPHORE_VARIANT_SIMPLE_BINARY
>            || variant == SEMAPHORE_VARIANT_COUNTING
>        );
> -      old_priority = 0;
> -      sc = RTEMS_NOT_DEFINED;
> -      break;
> +      _Thread_queue_Release(
> +        &the_semaphore->Core_control.Wait_queue,
> +        queue_context
> +      );
> +
> +      return RTEMS_NOT_DEFINED;
>    }
>
>    cpu_self = _Thread_queue_Dispatch_disable( queue_context );
> @@ -129,7 +126,7 @@ static rtems_status_code _Semaphore_Set_priority(
>    _Thread_Dispatch_enable( cpu_self );
>
>    *old_priority_p = _RTEMS_Priority_From_core( scheduler, old_priority );
> -  return sc;
> +  return RTEMS_SUCCESSFUL;
>  }
>
>  rtems_status_code rtems_semaphore_set_priority(
> --
> 2.26.2
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list