summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2007-11-27 20:51:18 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2007-11-27 20:51:18 +0000
commit5603b5a6e96e9e8f578e8a402654a0dd67ab0bbf (patch)
treee5b0984c94e02ca57c1d5d27247bf32d2a7c52df /cpukit
parent2007-11-27 Joel Sherrill <joel.sherrill@OARcorp.com> (diff)
downloadrtems-5603b5a6e96e9e8f578e8a402654a0dd67ab0bbf.tar.bz2
2007-11-27 Joel Sherrill <joel.sherrill@OARcorp.com>
* configure.ac, score/inline/rtems/score/thread.inl, score/src/threaddispatch.c: Add ability for user to disable inlining of _Thread_Enable_dispatch. This can save code space but more importantly it means the binary generated does not have code inlined that is difficult to test and very seldom executed.
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/ChangeLog8
-rw-r--r--cpukit/configure.ac6
-rw-r--r--cpukit/score/inline/rtems/score/thread.inl9
-rw-r--r--cpukit/score/src/threaddispatch.c34
4 files changed, 44 insertions, 13 deletions
diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog
index e65ac99274..cb5bb55ea0 100644
--- a/cpukit/ChangeLog
+++ b/cpukit/ChangeLog
@@ -1,3 +1,11 @@
+2007-11-27 Joel Sherrill <joel.sherrill@OARcorp.com>
+
+ * configure.ac, score/inline/rtems/score/thread.inl,
+ score/src/threaddispatch.c: Add ability for user to disable inlining
+ of _Thread_Enable_dispatch. This can save code space but more
+ importantly it means the binary generated does not have code inlined
+ that is difficult to test and very seldom executed.
+
2007-11-27 Glenn Humphrey <glenn.humphrey@OARcorp.com>
* posix/src/prwlocktimedrdlock.c, posix/src/prwlocktimedwrlock.c,
diff --git a/cpukit/configure.ac b/cpukit/configure.ac
index 5e87f4a494..91b6804e26 100644
--- a/cpukit/configure.ac
+++ b/cpukit/configure.ac
@@ -224,6 +224,12 @@ RTEMS_CPUOPT([__RTEMS_USE_TICKS_RATE_MONOTONIC_STATISTICS__],
[disable nanosecond granularity for period statistics]
)
+RTEMS_CPUOPT([__RTEMS_DO_NOT_INLINE_THREAD_ENABLE_DISPATCH__],
+ [test x"${RTEMS_DO_NOT_INLINE_THREAD_ENABLE_DISPATCH}" = x"1"],
+ [1],
+ [disable inlining _Thread_Enable_dispatch]
+)
+
RTEMS_CPUOPT([__RTEMS_MAJOR__],
[true],
[$rtems_major],
diff --git a/cpukit/score/inline/rtems/score/thread.inl b/cpukit/score/inline/rtems/score/thread.inl
index dad95990d4..6f58652a2c 100644
--- a/cpukit/score/inline/rtems/score/thread.inl
+++ b/cpukit/score/inline/rtems/score/thread.inl
@@ -189,7 +189,11 @@ RTEMS_INLINE_ROUTINE void _Thread_Disable_dispatch( void )
* processor will be transferred to the heir thread.
*/
-#if ( CPU_INLINE_ENABLE_DISPATCH == TRUE )
+#if ( (CPU_INLINE_ENABLE_DISPATCH == FALSE) || \
+ (__RTEMS_DO_NOT_INLINE_THREAD_ENABLE_DISPATCH__ == 1) )
+void _Thread_Enable_dispatch( void );
+#else
+/* inlining of enable dispatching must be true */
RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch()
{
RTEMS_COMPILER_MEMORY_BARRIER();
@@ -198,9 +202,6 @@ RTEMS_INLINE_ROUTINE void _Thread_Enable_dispatch()
}
#endif
-#if ( CPU_INLINE_ENABLE_DISPATCH == FALSE )
-void _Thread_Enable_dispatch( void );
-#endif
/**
* This routine allows dispatching to occur again. However,
diff --git a/cpukit/score/src/threaddispatch.c b/cpukit/score/src/threaddispatch.c
index 4c903b6c2a..cddfb757a6 100644
--- a/cpukit/score/src/threaddispatch.c
+++ b/cpukit/score/src/threaddispatch.c
@@ -31,20 +31,15 @@
#include <rtems/score/wkspace.h>
#ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS
-
#include <rtems/score/timespec.h>
#endif
/*PAGE
*
- * _Thread_Dispatch
+ * _Thread_Enable_dispatch
*
- * This kernel routine determines if a dispatch is needed, and if so
- * dispatches to the heir thread. Once the heir is running an attempt
- * is made to dispatch any ASRs.
- *
- * ALTERNATE ENTRY POINTS:
- * void _Thread_Enable_dispatch();
+ * This kernel routine exits a context switch disable critical section.
+ * This is the NOT INLINED version.
*
* Input parameters: NONE
*
@@ -55,7 +50,8 @@
* no dispatch thread
*/
-#if ( CPU_INLINE_ENABLE_DISPATCH == FALSE )
+#if ( (CPU_INLINE_ENABLE_DISPATCH == FALSE) || \
+ (__RTEMS_DO_NOT_INLINE_THREAD_ENABLE_DISPATCH__ == 1) )
void _Thread_Enable_dispatch( void )
{
if ( --_Thread_Dispatch_disable_level )
@@ -64,6 +60,26 @@ void _Thread_Enable_dispatch( void )
}
#endif
+/*PAGE
+ *
+ * _Thread_Dispatch
+ *
+ * This kernel routine determines if a dispatch is needed, and if so
+ * dispatches to the heir thread. Once the heir is running an attempt
+ * is made to dispatch any ASRs.
+ *
+ * ALTERNATE ENTRY POINTS:
+ * void _Thread_Enable_dispatch();
+ *
+ * Input parameters: NONE
+ *
+ * Output parameters: NONE
+ *
+ * INTERRUPT LATENCY:
+ * dispatch thread
+ * no dispatch thread
+ */
+
void _Thread_Dispatch( void )
{
Thread_Control *executing;