[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