[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