[rtems commit] score: Introduce thread resource count methods

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


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

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

score: Introduce thread resource count methods

This makes it easier to conditionally enable/disable the thread resource
count usage.

---

 cpukit/rtems/src/semcreate.c                     |  2 +-
 cpukit/score/include/rtems/score/coremuteximpl.h | 10 +++++-----
 cpukit/score/include/rtems/score/threadimpl.h    | 14 ++++++++++++++
 cpukit/score/src/mutex.c                         | 14 +++++++-------
 cpukit/score/src/threadqenqueue.c                |  2 +-
 5 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/cpukit/rtems/src/semcreate.c b/cpukit/rtems/src/semcreate.c
index 825e445..10e64f4 100644
--- a/cpukit/rtems/src/semcreate.c
+++ b/cpukit/rtems/src/semcreate.c
@@ -148,7 +148,7 @@ rtems_status_code rtems_semaphore_create(
           &the_semaphore->Core_control.Mutex.Recursive.Mutex,
           executing
         );
-        ++executing->resource_count;
+        _Thread_Resource_count_increment( executing );
       }
 
       status = STATUS_SUCCESSFUL;
diff --git a/cpukit/score/include/rtems/score/coremuteximpl.h b/cpukit/score/include/rtems/score/coremuteximpl.h
index bbe2f07..31d2a6e 100644
--- a/cpukit/score/include/rtems/score/coremuteximpl.h
+++ b/cpukit/score/include/rtems/score/coremuteximpl.h
@@ -149,7 +149,7 @@ RTEMS_INLINE_ROUTINE Status_Control _CORE_recursive_mutex_Seize(
 
   if ( owner == NULL ) {
     _CORE_mutex_Set_owner( &the_mutex->Mutex, executing );
-    ++executing->resource_count;
+    _Thread_Resource_count_increment( executing );
     _CORE_mutex_Release( &the_mutex->Mutex, queue_context );
     return STATUS_SUCCESSFUL;
   }
@@ -196,7 +196,7 @@ RTEMS_INLINE_ROUTINE Status_Control _CORE_recursive_mutex_Surrender(
     return STATUS_SUCCESSFUL;
   }
 
-  --executing->resource_count;
+  _Thread_Resource_count_decrement( executing );
   _CORE_mutex_Set_owner( &the_mutex->Mutex, NULL );
 
   heads = the_mutex->Mutex.Wait_queue.Queue.heads;
@@ -298,7 +298,7 @@ RTEMS_INLINE_ROUTINE Status_Control _CORE_ceiling_mutex_Set_owner(
   }
 
   _CORE_mutex_Set_owner( &the_mutex->Recursive.Mutex, owner );
-  ++owner->resource_count;
+  _Thread_Resource_count_increment( owner );
   _Thread_Priority_add(
     owner,
     &the_mutex->Priority_ceiling,
@@ -390,7 +390,7 @@ RTEMS_INLINE_ROUTINE Status_Control _CORE_ceiling_mutex_Surrender(
     return STATUS_SUCCESSFUL;
   }
 
-  --executing->resource_count;
+  _Thread_Resource_count_decrement( executing );
 
   _Thread_queue_Context_clear_priority_updates( queue_context );
   _Thread_Wait_acquire_default_critical( executing, &lock_context );
@@ -416,7 +416,7 @@ RTEMS_INLINE_ROUTINE Status_Control _CORE_ceiling_mutex_Surrender(
     if ( _Objects_Is_local_id( new_owner->Object.id ) )
 #endif
     {
-      ++new_owner->resource_count;
+      _Thread_Resource_count_increment( new_owner );
       _Thread_Priority_add(
         new_owner,
         &the_mutex->Priority_ceiling,
diff --git a/cpukit/score/include/rtems/score/threadimpl.h b/cpukit/score/include/rtems/score/threadimpl.h
index c7eef97..37127fb 100644
--- a/cpukit/score/include/rtems/score/threadimpl.h
+++ b/cpukit/score/include/rtems/score/threadimpl.h
@@ -973,6 +973,20 @@ RTEMS_INLINE_ROUTINE bool _Thread_Is_joinable(
   return ( the_thread->Life.state & THREAD_LIFE_DETACHED ) == 0;
 }
 
+RTEMS_INLINE_ROUTINE void _Thread_Resource_count_increment(
+  Thread_Control *the_thread
+)
+{
+  ++the_thread->resource_count;
+}
+
+RTEMS_INLINE_ROUTINE void _Thread_Resource_count_decrement(
+  Thread_Control *the_thread
+)
+{
+  --the_thread->resource_count;
+}
+
 /**
  * @brief Returns true if the thread owns resources, and false otherwise.
  *
diff --git a/cpukit/score/src/mutex.c b/cpukit/score/src/mutex.c
index daa90a5..719ae5b 100644
--- a/cpukit/score/src/mutex.c
+++ b/cpukit/score/src/mutex.c
@@ -131,7 +131,7 @@ static void _Mutex_Release_critical(
 
   heads = mutex->Queue.Queue.heads;
   mutex->Queue.Queue.owner = NULL;
-  --executing->resource_count;
+  _Thread_Resource_count_decrement( executing );
 
   if ( __predict_true( heads == NULL ) ) {
     _Mutex_Queue_release( mutex, queue_context );
@@ -161,7 +161,7 @@ void _Mutex_Acquire( struct _Mutex_Control *_mutex )
 
   if ( __predict_true( owner == NULL ) ) {
     mutex->Queue.Queue.owner = executing;
-    ++executing->resource_count;
+    _Thread_Resource_count_increment( executing );
     _Mutex_Queue_release( mutex, &queue_context );
   } else {
     _Thread_queue_Context_set_no_timeout( &queue_context );
@@ -187,7 +187,7 @@ int _Mutex_Acquire_timed(
 
   if ( __predict_true( owner == NULL ) ) {
     mutex->Queue.Queue.owner = executing;
-    ++executing->resource_count;
+    _Thread_Resource_count_increment( executing );
     _Mutex_Queue_release( mutex, &queue_context );
 
     return 0;
@@ -229,7 +229,7 @@ int _Mutex_Try_acquire( struct _Mutex_Control *_mutex )
 
   if ( __predict_true( owner == NULL ) ) {
     mutex->Queue.Queue.owner = executing;
-    ++executing->resource_count;
+    _Thread_Resource_count_increment( executing );
     eno = 0;
   } else {
     eno = EBUSY;
@@ -277,7 +277,7 @@ void _Mutex_recursive_Acquire( struct _Mutex_recursive_Control *_mutex )
 
   if ( __predict_true( owner == NULL ) ) {
     mutex->Mutex.Queue.Queue.owner = executing;
-    ++executing->resource_count;
+    _Thread_Resource_count_increment( executing );
     _Mutex_Queue_release( &mutex->Mutex, &queue_context );
   } else if ( owner == executing ) {
     ++mutex->nest_level;
@@ -306,7 +306,7 @@ int _Mutex_recursive_Acquire_timed(
 
   if ( __predict_true( owner == NULL ) ) {
     mutex->Mutex.Queue.Queue.owner = executing;
-    ++executing->resource_count;
+    _Thread_Resource_count_increment( executing );
     _Mutex_Queue_release( &mutex->Mutex, &queue_context );
 
     return 0;
@@ -353,7 +353,7 @@ int _Mutex_recursive_Try_acquire( struct _Mutex_recursive_Control *_mutex )
 
   if ( __predict_true( owner == NULL ) ) {
     mutex->Mutex.Queue.Queue.owner = executing;
-    ++executing->resource_count;
+    _Thread_Resource_count_increment( executing );
     eno = 0;
   } else if ( owner == executing ) {
     ++mutex->nest_level;
diff --git a/cpukit/score/src/threadqenqueue.c b/cpukit/score/src/threadqenqueue.c
index 335ee0f..84d1765 100644
--- a/cpukit/score/src/threadqenqueue.c
+++ b/cpukit/score/src/threadqenqueue.c
@@ -712,7 +712,7 @@ void _Thread_queue_Surrender(
   if ( !_Thread_queue_MP_set_callout( new_owner, queue_context ) )
 #endif
   {
-    ++new_owner->resource_count;
+    _Thread_Resource_count_increment( new_owner );
   }
 
   unblock = _Thread_queue_Make_ready_again( new_owner );



More information about the vc mailing list