From 0dd49d001515897cceb9195eb97dfac683552a0b Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 31 Oct 2016 16:10:32 +0100 Subject: 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 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 ); -- cgit v1.2.3