From 5603b5a6e96e9e8f578e8a402654a0dd67ab0bbf Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 27 Nov 2007 20:51:18 +0000 Subject: 2007-11-27 Joel Sherrill * 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. --- cpukit/ChangeLog | 8 +++++++ cpukit/configure.ac | 6 ++++++ cpukit/score/inline/rtems/score/thread.inl | 9 ++++---- cpukit/score/src/threaddispatch.c | 34 ++++++++++++++++++++++-------- 4 files changed, 44 insertions(+), 13 deletions(-) (limited to 'cpukit') 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 + + * 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 * 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 #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS - #include #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; -- cgit v1.2.3