[rtems commit] score: Conditionally enable thread resource count

Sebastian Huber sebh at rtems.org
Thu Nov 3 10:25:26 UTC 2016


Module:    rtems
Branch:    master
Commit:    47d246436f5b95359325740f4deb2df6345c971e
Changeset: http://git.rtems.org/rtems/commit/?id=47d246436f5b95359325740f4deb2df6345c971e

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Mon Oct 31 16:23:52 2016 +0100

score: Conditionally enable thread resource count

Maintain the thread resource count only in debug configurations.  This
is a performance optimization for non-debug configurations.

---

 cpukit/score/include/rtems/score/thread.h     |  8 ++++++++
 cpukit/score/include/rtems/score/threadimpl.h | 10 ++++++++++
 cpukit/score/src/thread.c                     |  2 ++
 cpukit/score/src/threadrestart.c              |  2 ++
 testsuites/sptests/spfatal28/testcase.h       |  4 ++++
 5 files changed, 26 insertions(+)

diff --git a/cpukit/score/include/rtems/score/thread.h b/cpukit/score/include/rtems/score/thread.h
index ff7f13b..7711f70 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 37127fb..6169446 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 864b21b..a0ba61d 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 4d9e2c9..182cdb6 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 ),
diff --git a/testsuites/sptests/spfatal28/testcase.h b/testsuites/sptests/spfatal28/testcase.h
index fc72100..9741760 100644
--- a/testsuites/sptests/spfatal28/testcase.h
+++ b/testsuites/sptests/spfatal28/testcase.h
@@ -22,6 +22,7 @@
 
 void force_error()
 {
+#if defined(RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT)
   rtems_status_code sc;
   rtems_id id;
 
@@ -36,4 +37,7 @@ void force_error()
 
   sc = rtems_task_delete(RTEMS_SELF);
   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+#else
+  _Terminate( INTERNAL_ERROR_CORE, false, INTERNAL_ERROR_RESOURCE_IN_USE );
+#endif
 }



More information about the vc mailing list