From 11b05f11d4d6d61717e345d20f492977b95ab131 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 8 May 2014 10:11:13 +0200 Subject: score: Fix CPU context usage on SMP We must not alter the is executing indicator in _CPU_Context_Initialize() since this would cause an invalid state during a self restart. The is executing indicator must be valid at creation time since otherwise _Thread_Kill_zombies() uses an undefined value for not started threads. This could result in a system life lock. --- cpukit/score/cpu/no_cpu/rtems/score/cpu.h | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'cpukit/score/cpu/no_cpu/rtems/score/cpu.h') diff --git a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h index 739a6a8a42..9570fb6c8d 100644 --- a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h +++ b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h @@ -1596,10 +1596,30 @@ register struct Per_CPU_Control *_CPU_Per_CPU_current asm( "rX" ); } /** - * @brief Macro to return the is executing field of the thread context. + * @brief Gets the is executing indicator of the thread context. + * + * @param[in] context The context. */ - #define _CPU_Context_Get_is_executing( _context ) \ - ( ( _context )->is_executing ) + static inline bool _CPU_Context_Get_is_executing( + const Context_Control *context + ) + { + return context->is_executing; + } + + /** + * @brief Sets the is executing indicator of the thread context. + * + * @param[in] context The context. + * @param[in] is_executing The new value for the is executing indicator. + */ + static inline void _CPU_Context_Set_is_executing( + Context_Control *context, + bool is_executing + ) + { + context->is_executing = is_executing; + } #endif #ifdef __cplusplus -- cgit v1.2.3