[PATCH] score: Simplify _Scheduler_Tick()

Gedare Bloom gedare at rtems.org
Thu Aug 12 17:37:08 UTC 2021


ok

On Thu, Aug 12, 2021 at 3:11 AM Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
>
> The NULL pointer check for the executing thread was introduced by
> commit:
>
> commit be3c257286ad870d8d1a64941cde53fd2d33a633
> Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
> Date:   Thu Jun 5 11:17:26 2014 +0200
>
>     score: Avoid NULL pointer access
>
>     Check that the executing thread is not NULL in _Scheduler_Tick().  It
>     may be NULL in case the processor has an optional scheduler assigned and
>     the system was not able to start the processor.
>
> However, it is no longer necessary since now the clock interrupt is
> distributed to the online processors.
> ---
>  cpukit/include/rtems/score/schedulerimpl.h | 26 ++++++++++++++++++----
>  1 file changed, 22 insertions(+), 4 deletions(-)
>
> diff --git a/cpukit/include/rtems/score/schedulerimpl.h b/cpukit/include/rtems/score/schedulerimpl.h
> index 586f9e0ec8..7b0658073e 100644
> --- a/cpukit/include/rtems/score/schedulerimpl.h
> +++ b/cpukit/include/rtems/score/schedulerimpl.h
> @@ -611,12 +611,30 @@ RTEMS_INLINE_ROUTINE void _Scheduler_Cancel_job(
>   */
>  RTEMS_INLINE_ROUTINE void _Scheduler_Tick( const Per_CPU_Control *cpu )
>  {
> -  const Scheduler_Control *scheduler = _Scheduler_Get_by_CPU( cpu );
> -  Thread_Control *executing = cpu->executing;
> +  const Scheduler_Control *scheduler;
> +  Thread_Control          *executing;
> +
> +  scheduler = _Scheduler_Get_by_CPU( cpu );
>
> -  if ( scheduler != NULL && executing != NULL ) {
> -    ( *scheduler->Operations.tick )( scheduler, executing );
> +#if defined(RTEMS_SMP)
> +  if ( scheduler == NULL ) {
> +    /*
> +     * In SMP configurations, processors may be removed/added at runtime
> +     * from/to a scheduler.  There may be still clock interrupts on currently
> +     * unassigned processors.
> +     */
> +    return;
>    }
> +#endif
> +
> +  /*
> +   * Each online processor has at least an idle thread as the executing thread
> +   * even in case it has currently no scheduler assigned.  Clock interrupts on
> +   * processors which are not online would be a severe bug of the Clock Driver.
> +   */
> +  executing = _Per_CPU_Get_executing( cpu );
> +  _Assert( executing != NULL );
> +  ( *scheduler->Operations.tick )( scheduler, executing );
>  }
>
>  /**
> --
> 2.26.2
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list