summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include/rtems/score/percpu.h
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-11-04 13:28:23 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-11-07 07:39:42 +0100
commitdf48ed2cbab0adeb5efc1c90beee25011436689e (patch)
tree1cc1f2e67b074bd7613b37778c988013b5edc40f /cpukit/score/include/rtems/score/percpu.h
parentscore: Prevent assignment to _Thread_Executing (diff)
downloadrtems-df48ed2cbab0adeb5efc1c90beee25011436689e.tar.bz2
score: Add optional _CPU_Get_thread_executing()
Diffstat (limited to '')
-rw-r--r--cpukit/score/include/rtems/score/percpu.h18
1 files changed, 13 insertions, 5 deletions
diff --git a/cpukit/score/include/rtems/score/percpu.h b/cpukit/score/include/rtems/score/percpu.h
index 236cf6a979..e3be0c80d3 100644
--- a/cpukit/score/include/rtems/score/percpu.h
+++ b/cpukit/score/include/rtems/score/percpu.h
@@ -17,7 +17,7 @@
#ifndef _RTEMS_PERCPU_H
#define _RTEMS_PERCPU_H
-#include <rtems/score/cpu.h>
+#include <rtems/score/cpuimpl.h>
#if defined( ASM )
#include <rtems/asm.h>
@@ -681,8 +681,15 @@ bool _Per_CPU_State_wait_for_non_initial_state(
_Per_CPU_Get()->thread_dispatch_disable_level
#define _Thread_Heir \
_Per_CPU_Get()->heir
+
+#if defined(_CPU_Get_thread_executing)
+#define _Thread_Executing \
+ _CPU_Get_thread_executing()
+#else
#define _Thread_Executing \
_Per_CPU_Get_executing( _Per_CPU_Get() )
+#endif
+
#define _ISR_Nest_level \
_Per_CPU_Get()->isr_nest_level
#define _CPU_Interrupt_stack_low \
@@ -695,9 +702,10 @@ bool _Per_CPU_State_wait_for_non_initial_state(
/**
* @brief Returns the thread control block of the executing thread.
*
- * This function can be called in any context. On SMP configurations
+ * This function can be called in any thread context. On SMP configurations,
* interrupts are disabled to ensure that the processor index is used
- * consistently.
+ * consistently if no CPU port specific method is available to get the
+ * executing thread.
*
* @return The thread control block of the executing thread.
*/
@@ -705,7 +713,7 @@ RTEMS_INLINE_ROUTINE struct _Thread_Control *_Thread_Get_executing( void )
{
struct _Thread_Control *executing;
- #if defined( RTEMS_SMP )
+ #if defined(RTEMS_SMP) && !defined(_CPU_Get_thread_executing)
ISR_Level level;
_ISR_Local_disable( level );
@@ -713,7 +721,7 @@ RTEMS_INLINE_ROUTINE struct _Thread_Control *_Thread_Get_executing( void )
executing = _Thread_Executing;
- #if defined( RTEMS_SMP )
+ #if defined(RTEMS_SMP) && !defined(_CPU_Get_thread_executing)
_ISR_Local_enable( level );
#endif