[PATCH 2/4] score: Prevent assignment to _Thread_Executing

Gedare Bloom gedare at rtems.org
Fri Nov 4 14:44:13 UTC 2016


On Fri, Nov 4, 2016 at 9:08 AM, Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
> ---
>  cpukit/score/include/rtems/score/percpu.h |  2 +-
>  testsuites/tmtests/tm26/task1.c           | 12 +-----------
>  testsuites/tmtests/tm27/task1.c           | 15 +++++++++++----
>  3 files changed, 13 insertions(+), 16 deletions(-)
>
> diff --git a/cpukit/score/include/rtems/score/percpu.h b/cpukit/score/include/rtems/score/percpu.h
> index 066bf4c..1ccbc3b 100644
> --- a/cpukit/score/include/rtems/score/percpu.h
> +++ b/cpukit/score/include/rtems/score/percpu.h
> @@ -688,7 +688,7 @@ bool _Per_CPU_State_wait_for_non_initial_state(
>  #define _Thread_Heir \
>    _Per_CPU_Get()->heir
>  #define _Thread_Executing \
> -  _Per_CPU_Get()->executing
> +  _Per_CPU_Get_executing( _Per_CPU_Get() )
>  #define _ISR_Nest_level \
>    _Per_CPU_Get()->isr_nest_level
>  #define _CPU_Interrupt_stack_low \
> diff --git a/testsuites/tmtests/tm26/task1.c b/testsuites/tmtests/tm26/task1.c
> index 173cf7f..9d157e9 100644
> --- a/testsuites/tmtests/tm26/task1.c
> +++ b/testsuites/tmtests/tm26/task1.c
> @@ -123,17 +123,7 @@ static void set_thread_heir( Thread_Control *thread )
>
>  static void set_thread_executing( Thread_Control *thread )
>  {
> -#if defined( PREVENT_SMP_ASSERT_FAILURES )
> -  ISR_Level level;
> -
> -  _ISR_Local_disable( level );
> -#endif
> -
> -  _Thread_Executing = thread;
> -
> -#if defined( PREVENT_SMP_ASSERT_FAILURES )
> -  _ISR_Local_enable( level );
> -#endif
> +  _Per_CPU_Get_snapshot()->executing = thread;
Normally one thinks of a snapshot as a read-only kind of thing, like a
picture. So I was a little confused by this terminology--for some
reason I hadn't noticed this _Per_CPU_Get_snapshot() before now.

>  }
>
>  static void thread_resume( Thread_Control *thread )
> diff --git a/testsuites/tmtests/tm27/task1.c b/testsuites/tmtests/tm27/task1.c
> index 9126391..c89c095 100644
> --- a/testsuites/tmtests/tm27/task1.c
> +++ b/testsuites/tmtests/tm27/task1.c
> @@ -46,6 +46,11 @@ rtems_isr Isr_handler(
>    rtems_vector_number vector
>  );
>
> +static void set_thread_executing( Thread_Control *thread )
> +{
> +  _Per_CPU_Get_snapshot()->executing = thread;
> +}
> +
>  rtems_task Init(
>    rtems_task_argument argument
>  )
> @@ -191,8 +196,9 @@ rtems_task Task_1(
>    _ISR_Local_disable(level);
>  #endif
>
> -  _Thread_Executing =
> -        (Thread_Control *) _Chain_First(&scheduler_context->Ready[LOW_PRIORITY]);
> +  set_thread_executing(
> +    (Thread_Control *) _Chain_First(&scheduler_context->Ready[LOW_PRIORITY])
> +  );
>
>    _Thread_Dispatch_necessary = 1;
>
> @@ -265,8 +271,9 @@ rtems_task Task_2(
>    _Thread_State_acquire( executing, &state_lock_context );
>    _Scheduler_Acquire_critical( scheduler, &scheduler_lock_context );
>
> -  _Thread_Executing =
> -        (Thread_Control *) _Chain_First(&scheduler_context->Ready[LOW_PRIORITY]);
> +  set_thread_executing(
> +    (Thread_Control *) _Chain_First(&scheduler_context->Ready[LOW_PRIORITY])
> +  );
>
>    _Thread_Dispatch_necessary = 1;
>
> --
> 1.8.4.5
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel



More information about the devel mailing list