summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;