summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-10-31 16:10:32 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-11-03 10:55:48 +0100
commit0dd49d001515897cceb9195eb97dfac683552a0b (patch)
tree4d43cf8b2fb32ae17ffc0d7d6109f02e44dcedca
parentrtems: Fix binary semaphore resource count (diff)
downloadrtems-0dd49d001515897cceb9195eb97dfac683552a0b.tar.bz2
score: Introduce thread resource count methods
This makes it easier to conditionally enable/disable the thread resource count usage.
-rw-r--r--cpukit/rtems/src/semcreate.c2
-rw-r--r--cpukit/score/include/rtems/score/coremuteximpl.h10
-rw-r--r--cpukit/score/include/rtems/score/threadimpl.h14
-rw-r--r--cpukit/score/src/mutex.c14
-rw-r--r--cpukit/score/src/threadqenqueue.c2
5 files changed, 28 insertions, 14 deletions
diff --git a/cpukit/rtems/src/semcreate.c b/cpukit/rtems/src/semcreate.c
index 825e445b35..10e64f4a01 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 bbe2f07a7e..31d2a6e71b 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 c7eef97254..37127fbabd 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 daa90a528f..719ae5bd4c 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 335ee0f21d..84d1765462 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 );