[PATCH 2/4] score: Prevent assignment to _Thread_Executing
Sebastian Huber
sebastian.huber at embedded-brains.de
Fri Nov 4 13:08:21 UTC 2016
---
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;
}
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
More information about the devel
mailing list