From ef6f8a8377964a2d94eb7215724d11b499ec078b Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 11 May 2016 14:03:23 +0200 Subject: score: Avoid Giant lock for scheduler set/get Update #2555. --- cpukit/score/include/rtems/score/threadqimpl.h | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'cpukit/score/include/rtems/score/threadqimpl.h') diff --git a/cpukit/score/include/rtems/score/threadqimpl.h b/cpukit/score/include/rtems/score/threadqimpl.h index 898d61c552..b09cc97790 100644 --- a/cpukit/score/include/rtems/score/threadqimpl.h +++ b/cpukit/score/include/rtems/score/threadqimpl.h @@ -108,7 +108,7 @@ RTEMS_INLINE_ROUTINE void _Thread_queue_Queue_do_acquire_critical( _Thread_queue_Queue_do_acquire_critical( queue, lock_context ) #endif -RTEMS_INLINE_ROUTINE void _Thread_queue_Queue_release( +RTEMS_INLINE_ROUTINE void _Thread_queue_Queue_release_critical( Thread_queue_Queue *queue, ISR_lock_Context *lock_context ) @@ -118,7 +118,18 @@ RTEMS_INLINE_ROUTINE void _Thread_queue_Queue_release( &queue->Lock, &lock_context->Lock_context.Stats_context ); +#else + (void) queue; + (void) lock_context; #endif +} + +RTEMS_INLINE_ROUTINE void _Thread_queue_Queue_release( + Thread_queue_Queue *queue, + ISR_lock_Context *lock_context +) +{ + _Thread_queue_Queue_release_critical( queue, lock_context ); _ISR_lock_ISR_enable( lock_context ); } @@ -159,7 +170,7 @@ RTEMS_INLINE_ROUTINE bool _Thread_queue_Is_lock_owner( } #endif -RTEMS_INLINE_ROUTINE void _Thread_queue_Release( +RTEMS_INLINE_ROUTINE void _Thread_queue_Release_critical( Thread_queue_Control *the_thread_queue, ISR_lock_Context *lock_context ) @@ -170,12 +181,21 @@ RTEMS_INLINE_ROUTINE void _Thread_queue_Release( the_thread_queue->owner = SMP_LOCK_NO_OWNER; #endif #endif - _Thread_queue_Queue_release( + _Thread_queue_Queue_release_critical( &the_thread_queue->Queue, lock_context ); } +RTEMS_INLINE_ROUTINE void _Thread_queue_Release( + Thread_queue_Control *the_thread_queue, + ISR_lock_Context *lock_context +) +{ + _Thread_queue_Release_critical( the_thread_queue, lock_context ); + _ISR_lock_ISR_enable( lock_context ); +} + Thread_Control *_Thread_queue_Do_dequeue( Thread_queue_Control *the_thread_queue, const Thread_queue_Operations *operations -- cgit v1.2.3