diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-10-31 16:23:52 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-11-03 11:23:30 +0100 |
commit | 47d246436f5b95359325740f4deb2df6345c971e (patch) | |
tree | 0d006b98e2449d66b8b882c39ffb6ef107e1532f /cpukit/score | |
parent | score: Relax _Scheduler_Set() restrictions (diff) | |
download | rtems-47d246436f5b95359325740f4deb2df6345c971e.tar.bz2 |
score: Conditionally enable thread resource count
Maintain the thread resource count only in debug configurations. This
is a performance optimization for non-debug configurations.
Diffstat (limited to 'cpukit/score')
-rw-r--r-- | cpukit/score/include/rtems/score/thread.h | 8 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/threadimpl.h | 10 | ||||
-rw-r--r-- | cpukit/score/src/thread.c | 2 | ||||
-rw-r--r-- | cpukit/score/src/threadrestart.c | 2 |
4 files changed, 22 insertions, 0 deletions
diff --git a/cpukit/score/include/rtems/score/thread.h b/cpukit/score/include/rtems/score/thread.h index ff7f13be55..7711f706f3 100644 --- a/cpukit/score/include/rtems/score/thread.h +++ b/cpukit/score/include/rtems/score/thread.h @@ -83,6 +83,10 @@ extern "C" { #define RTEMS_SCORE_THREAD_ENABLE_USER_PROVIDED_STACK_VIA_API #endif +#if defined(RTEMS_DEBUG) +#define RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT +#endif + /* * Only provided for backward compatiblity to not break application * configurations. @@ -492,8 +496,10 @@ typedef struct { */ Priority_Node Real_priority; +#if defined(RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT) /** This field is the number of mutexes currently held by this proxy. */ uint32_t resource_count; +#endif /** * @brief Scheduler related control. @@ -716,8 +722,10 @@ struct _Thread_Control { */ Priority_Node Real_priority; +#if defined(RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT) /** This field is the number of mutexes currently held by this thread. */ uint32_t resource_count; +#endif /** * @brief Scheduler related control. diff --git a/cpukit/score/include/rtems/score/threadimpl.h b/cpukit/score/include/rtems/score/threadimpl.h index 37127fbabd..61694461b4 100644 --- a/cpukit/score/include/rtems/score/threadimpl.h +++ b/cpukit/score/include/rtems/score/threadimpl.h @@ -977,16 +977,25 @@ RTEMS_INLINE_ROUTINE void _Thread_Resource_count_increment( Thread_Control *the_thread ) { +#if defined(RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT) ++the_thread->resource_count; +#else + (void) the_thread; +#endif } RTEMS_INLINE_ROUTINE void _Thread_Resource_count_decrement( Thread_Control *the_thread ) { +#if defined(RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT) --the_thread->resource_count; +#else + (void) the_thread; +#endif } +#if defined(RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT) /** * @brief Returns true if the thread owns resources, and false otherwise. * @@ -1001,6 +1010,7 @@ RTEMS_INLINE_ROUTINE bool _Thread_Owns_resources( { return the_thread->resource_count != 0; } +#endif #if defined(RTEMS_SMP) RTEMS_INLINE_ROUTINE void _Thread_Scheduler_cancel_need_for_help( diff --git a/cpukit/score/src/thread.c b/cpukit/score/src/thread.c index 864b21bf6f..a0ba61d88c 100644 --- a/cpukit/score/src/thread.c +++ b/cpukit/score/src/thread.c @@ -33,7 +33,9 @@ THREAD_OFFSET_ASSERT( Object ); THREAD_OFFSET_ASSERT( Join_queue ); THREAD_OFFSET_ASSERT( current_state ); THREAD_OFFSET_ASSERT( Real_priority ); +#if defined(RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT) THREAD_OFFSET_ASSERT( resource_count ); +#endif THREAD_OFFSET_ASSERT( Scheduler ); THREAD_OFFSET_ASSERT( Wait ); THREAD_OFFSET_ASSERT( Timer ); diff --git a/cpukit/score/src/threadrestart.c b/cpukit/score/src/threadrestart.c index 4d9e2c93ea..182cdb6128 100644 --- a/cpukit/score/src/threadrestart.c +++ b/cpukit/score/src/threadrestart.c @@ -133,6 +133,7 @@ static void _Thread_Add_to_zombie_chain( Thread_Control *the_thread ) static void _Thread_Make_zombie( Thread_Control *the_thread ) { +#if defined(RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT) if ( _Thread_Owns_resources( the_thread ) ) { _Terminate( INTERNAL_ERROR_CORE, @@ -140,6 +141,7 @@ static void _Thread_Make_zombie( Thread_Control *the_thread ) INTERNAL_ERROR_RESOURCE_IN_USE ); } +#endif _Objects_Close( _Objects_Get_information_id( the_thread->Object.id ), |