forked from Imagelibrary/rtems
score: Simplify thread queue acquire/release
This commit is contained in:
@@ -68,10 +68,7 @@ RTEMS_INLINE_ROUTINE void _POSIX_Condition_variables_Acquire_critical(
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Acquire_critical(
|
||||
&the_cond->Wait_queue,
|
||||
&queue_context->Lock_context
|
||||
);
|
||||
_Thread_queue_Acquire_critical( &the_cond->Wait_queue, queue_context );
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _POSIX_Condition_variables_Release(
|
||||
@@ -79,7 +76,7 @@ RTEMS_INLINE_ROUTINE void _POSIX_Condition_variables_Release(
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Release( &the_cond->Wait_queue, &queue_context->Lock_context );
|
||||
_Thread_queue_Release( &the_cond->Wait_queue, queue_context );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -77,20 +77,14 @@ RTEMS_INLINE_ROUTINE void _POSIX_signals_Acquire(
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Acquire(
|
||||
&_POSIX_signals_Wait_queue,
|
||||
&queue_context->Lock_context
|
||||
);
|
||||
_Thread_queue_Acquire( &_POSIX_signals_Wait_queue, queue_context );
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _POSIX_signals_Release(
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Release(
|
||||
&_POSIX_signals_Wait_queue,
|
||||
&queue_context->Lock_context
|
||||
);
|
||||
_Thread_queue_Release( &_POSIX_signals_Wait_queue, queue_context );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -46,7 +46,7 @@ rtems_status_code rtems_semaphore_delete(
|
||||
|
||||
_Thread_queue_Acquire_critical(
|
||||
&the_semaphore->Core_control.Wait_queue,
|
||||
&queue_context.Lock_context
|
||||
&queue_context
|
||||
);
|
||||
|
||||
switch ( the_semaphore->variant ) {
|
||||
@@ -81,7 +81,7 @@ rtems_status_code rtems_semaphore_delete(
|
||||
if ( status != STATUS_SUCCESSFUL ) {
|
||||
_Thread_queue_Release(
|
||||
&the_semaphore->Core_control.Wait_queue,
|
||||
&queue_context.Lock_context
|
||||
&queue_context
|
||||
);
|
||||
_Objects_Allocator_unlock();
|
||||
return _Status_Get( status );
|
||||
|
||||
@@ -39,7 +39,7 @@ rtems_status_code rtems_semaphore_flush( rtems_id id )
|
||||
|
||||
_Thread_queue_Acquire_critical(
|
||||
&the_semaphore->Core_control.Wait_queue,
|
||||
&queue_context.Lock_context
|
||||
&queue_context
|
||||
);
|
||||
_Thread_queue_Context_set_MP_callout(
|
||||
&queue_context,
|
||||
@@ -51,7 +51,7 @@ rtems_status_code rtems_semaphore_flush( rtems_id id )
|
||||
case SEMAPHORE_VARIANT_MRSP:
|
||||
_Thread_queue_Release(
|
||||
&the_semaphore->Core_control.Wait_queue,
|
||||
&queue_context.Lock_context
|
||||
&queue_context
|
||||
);
|
||||
return RTEMS_NOT_DEFINED;
|
||||
#endif
|
||||
|
||||
@@ -54,7 +54,7 @@ static rtems_status_code _Semaphore_Set_priority(
|
||||
|
||||
_Thread_queue_Acquire_critical(
|
||||
&the_semaphore->Core_control.Wait_queue,
|
||||
&queue_context->Lock_context
|
||||
queue_context
|
||||
);
|
||||
|
||||
switch ( the_semaphore->variant ) {
|
||||
@@ -108,7 +108,7 @@ static rtems_status_code _Semaphore_Set_priority(
|
||||
|
||||
_Thread_queue_Release(
|
||||
&the_semaphore->Core_control.Wait_queue,
|
||||
&queue_context->Lock_context
|
||||
queue_context
|
||||
);
|
||||
|
||||
*old_priority_p = _RTEMS_Priority_From_core( scheduler, old_priority );
|
||||
|
||||
@@ -59,10 +59,7 @@ RTEMS_INLINE_ROUTINE void _CORE_barrier_Acquire_critical(
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Acquire_critical(
|
||||
&the_barrier->Wait_queue,
|
||||
&queue_context->Lock_context
|
||||
);
|
||||
_Thread_queue_Acquire_critical( &the_barrier->Wait_queue, queue_context );
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _CORE_barrier_Release(
|
||||
@@ -70,10 +67,7 @@ RTEMS_INLINE_ROUTINE void _CORE_barrier_Release(
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Release(
|
||||
&the_barrier->Wait_queue,
|
||||
&queue_context->Lock_context
|
||||
);
|
||||
_Thread_queue_Release( &the_barrier->Wait_queue, queue_context );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -313,10 +313,7 @@ RTEMS_INLINE_ROUTINE void _CORE_message_queue_Acquire(
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Acquire(
|
||||
&the_message_queue->Wait_queue,
|
||||
&queue_context->Lock_context
|
||||
);
|
||||
_Thread_queue_Acquire( &the_message_queue->Wait_queue, queue_context );
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _CORE_message_queue_Acquire_critical(
|
||||
@@ -324,10 +321,7 @@ RTEMS_INLINE_ROUTINE void _CORE_message_queue_Acquire_critical(
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Acquire_critical(
|
||||
&the_message_queue->Wait_queue,
|
||||
&queue_context->Lock_context
|
||||
);
|
||||
_Thread_queue_Acquire_critical( &the_message_queue->Wait_queue, queue_context );
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _CORE_message_queue_Release(
|
||||
@@ -335,10 +329,7 @@ RTEMS_INLINE_ROUTINE void _CORE_message_queue_Release(
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Release(
|
||||
&the_message_queue->Wait_queue,
|
||||
&queue_context->Lock_context
|
||||
);
|
||||
_Thread_queue_Release( &the_message_queue->Wait_queue, queue_context );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -56,10 +56,7 @@ RTEMS_INLINE_ROUTINE void _CORE_mutex_Acquire_critical(
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Acquire_critical(
|
||||
&the_mutex->Wait_queue,
|
||||
&queue_context->Lock_context
|
||||
);
|
||||
_Thread_queue_Acquire_critical( &the_mutex->Wait_queue, queue_context );
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _CORE_mutex_Release(
|
||||
@@ -67,10 +64,7 @@ RTEMS_INLINE_ROUTINE void _CORE_mutex_Release(
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Release(
|
||||
&the_mutex->Wait_queue,
|
||||
&queue_context->Lock_context
|
||||
);
|
||||
_Thread_queue_Release( &the_mutex->Wait_queue, queue_context );
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE Thread_Control *_CORE_mutex_Get_owner(
|
||||
|
||||
@@ -71,10 +71,7 @@ RTEMS_INLINE_ROUTINE void _CORE_RWLock_Acquire_critical(
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Acquire_critical(
|
||||
&the_rwlock->Wait_queue,
|
||||
&queue_context->Lock_context
|
||||
);
|
||||
_Thread_queue_Acquire_critical( &the_rwlock->Wait_queue, queue_context );
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _CORE_RWLock_Release(
|
||||
@@ -82,10 +79,7 @@ RTEMS_INLINE_ROUTINE void _CORE_RWLock_Release(
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Release(
|
||||
&the_rwlock->Wait_queue,
|
||||
&queue_context->Lock_context
|
||||
);
|
||||
_Thread_queue_Release( &the_rwlock->Wait_queue, queue_context );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -58,10 +58,7 @@ RTEMS_INLINE_ROUTINE void _CORE_semaphore_Acquire_critical(
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Acquire_critical(
|
||||
&the_semaphore->Wait_queue,
|
||||
&queue_context->Lock_context
|
||||
);
|
||||
_Thread_queue_Acquire_critical( &the_semaphore->Wait_queue, queue_context );
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _CORE_semaphore_Release(
|
||||
@@ -69,10 +66,7 @@ RTEMS_INLINE_ROUTINE void _CORE_semaphore_Release(
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Release(
|
||||
&the_semaphore->Wait_queue,
|
||||
&queue_context->Lock_context
|
||||
);
|
||||
_Thread_queue_Release( &the_semaphore->Wait_queue, queue_context );
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _CORE_semaphore_Destroy(
|
||||
|
||||
@@ -66,10 +66,7 @@ RTEMS_INLINE_ROUTINE void _MRSP_Acquire_critical(
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Acquire_critical(
|
||||
&mrsp->Wait_queue,
|
||||
&queue_context->Lock_context
|
||||
);
|
||||
_Thread_queue_Acquire_critical( &mrsp->Wait_queue, queue_context );
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _MRSP_Release(
|
||||
@@ -77,7 +74,7 @@ RTEMS_INLINE_ROUTINE void _MRSP_Release(
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Release( &mrsp->Wait_queue, &queue_context->Lock_context );
|
||||
_Thread_queue_Release( &mrsp->Wait_queue, queue_context );
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE bool _MRSP_Restore_priority_filter(
|
||||
|
||||
@@ -368,7 +368,7 @@ RTEMS_INLINE_ROUTINE void _Thread_State_acquire_critical(
|
||||
ISR_lock_Context *lock_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Acquire_critical( &the_thread->Join_queue, lock_context );
|
||||
_Thread_queue_Do_acquire_critical( &the_thread->Join_queue, lock_context );
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _Thread_State_acquire(
|
||||
@@ -376,7 +376,8 @@ RTEMS_INLINE_ROUTINE void _Thread_State_acquire(
|
||||
ISR_lock_Context *lock_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Acquire( &the_thread->Join_queue, lock_context );
|
||||
_ISR_lock_ISR_disable( lock_context );
|
||||
_Thread_State_acquire_critical( the_thread, lock_context );
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE Thread_Control *_Thread_State_acquire_for_executing(
|
||||
@@ -397,7 +398,7 @@ RTEMS_INLINE_ROUTINE void _Thread_State_release_critical(
|
||||
ISR_lock_Context *lock_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Release_critical( &the_thread->Join_queue, lock_context );
|
||||
_Thread_queue_Do_release_critical( &the_thread->Join_queue, lock_context );
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _Thread_State_release(
|
||||
@@ -405,7 +406,8 @@ RTEMS_INLINE_ROUTINE void _Thread_State_release(
|
||||
ISR_lock_Context *lock_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Release( &the_thread->Join_queue, lock_context );
|
||||
_Thread_State_release_critical( the_thread, lock_context );
|
||||
_ISR_lock_ISR_enable( lock_context );
|
||||
}
|
||||
|
||||
#if defined(RTEMS_DEBUG)
|
||||
|
||||
@@ -350,7 +350,7 @@ RTEMS_INLINE_ROUTINE void _Thread_queue_Queue_release(
|
||||
_ISR_lock_ISR_enable( lock_context );
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _Thread_queue_Acquire_critical(
|
||||
RTEMS_INLINE_ROUTINE void _Thread_queue_Do_acquire_critical(
|
||||
Thread_queue_Control *the_thread_queue,
|
||||
ISR_lock_Context *lock_context
|
||||
)
|
||||
@@ -365,13 +365,24 @@ RTEMS_INLINE_ROUTINE void _Thread_queue_Acquire_critical(
|
||||
#endif
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _Thread_queue_Acquire(
|
||||
RTEMS_INLINE_ROUTINE void _Thread_queue_Acquire_critical(
|
||||
Thread_queue_Control *the_thread_queue,
|
||||
ISR_lock_Context *lock_context
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_ISR_lock_ISR_disable( lock_context );
|
||||
_Thread_queue_Acquire_critical( the_thread_queue, lock_context );
|
||||
_Thread_queue_Do_acquire_critical(
|
||||
the_thread_queue,
|
||||
&queue_context->Lock_context
|
||||
);
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _Thread_queue_Acquire(
|
||||
Thread_queue_Control *the_thread_queue,
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_ISR_lock_ISR_disable( &queue_context->Lock_context );
|
||||
_Thread_queue_Acquire_critical( the_thread_queue, queue_context );
|
||||
}
|
||||
|
||||
#if defined(RTEMS_DEBUG)
|
||||
@@ -387,7 +398,7 @@ RTEMS_INLINE_ROUTINE bool _Thread_queue_Is_lock_owner(
|
||||
}
|
||||
#endif
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _Thread_queue_Release_critical(
|
||||
RTEMS_INLINE_ROUTINE void _Thread_queue_Do_release_critical(
|
||||
Thread_queue_Control *the_thread_queue,
|
||||
ISR_lock_Context *lock_context
|
||||
)
|
||||
@@ -404,13 +415,24 @@ RTEMS_INLINE_ROUTINE void _Thread_queue_Release_critical(
|
||||
);
|
||||
}
|
||||
|
||||
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
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Release_critical( the_thread_queue, lock_context );
|
||||
_ISR_lock_ISR_enable( lock_context );
|
||||
_Thread_queue_Do_release_critical(
|
||||
the_thread_queue,
|
||||
&queue_context->Lock_context
|
||||
);
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _Thread_queue_Release(
|
||||
Thread_queue_Control *the_thread_queue,
|
||||
Thread_queue_Context *queue_context
|
||||
)
|
||||
{
|
||||
_Thread_queue_Release_critical( the_thread_queue, queue_context );
|
||||
_ISR_lock_ISR_enable( &queue_context->Lock_context );
|
||||
}
|
||||
|
||||
Thread_Control *_Thread_queue_Do_dequeue(
|
||||
@@ -541,7 +563,7 @@ RTEMS_INLINE_ROUTINE void _Thread_queue_Enqueue(
|
||||
Thread_queue_Context queue_context;
|
||||
|
||||
_Thread_queue_Context_initialize( &queue_context );
|
||||
_Thread_queue_Acquire( the_thread_queue, &queue_context.Lock_context );
|
||||
_Thread_queue_Acquire( the_thread_queue, &queue_context );
|
||||
_Thread_queue_Context_set_expected_level( &queue_context, expected_level );
|
||||
if ( discipline == WATCHDOG_ABSOLUTE ) {
|
||||
_Thread_queue_Context_set_absolute_timeout( &queue_context, timeout );
|
||||
@@ -662,7 +684,7 @@ void _Thread_queue_Unblock_critical(
|
||||
* Thread_Control *first;
|
||||
*
|
||||
* _Thread_queue_Context_initialize( &queue_context, NULL );
|
||||
* _Thread_queue_Acquire( &mutex->Queue, &queue_context.Lock_context );
|
||||
* _Thread_queue_Acquire( &mutex->Queue, queue_context );
|
||||
*
|
||||
* first = _Thread_queue_First_locked( &mutex->Queue );
|
||||
* mutex->owner = first;
|
||||
|
||||
@@ -641,7 +641,7 @@ Thread_Control *_Thread_queue_Do_dequeue(
|
||||
|
||||
_Thread_queue_Context_initialize( &queue_context );
|
||||
_Thread_queue_Context_set_MP_callout( &queue_context, mp_callout );
|
||||
_Thread_queue_Acquire( the_thread_queue, &queue_context.Lock_context );
|
||||
_Thread_queue_Acquire( the_thread_queue, &queue_context );
|
||||
|
||||
the_thread = _Thread_queue_First_locked( the_thread_queue, operations );
|
||||
|
||||
@@ -653,7 +653,7 @@ Thread_Control *_Thread_queue_Do_dequeue(
|
||||
&queue_context
|
||||
);
|
||||
} else {
|
||||
_Thread_queue_Release( the_thread_queue, &queue_context.Lock_context );
|
||||
_Thread_queue_Release( the_thread_queue, &queue_context );
|
||||
}
|
||||
|
||||
return the_thread;
|
||||
|
||||
@@ -25,12 +25,12 @@ Thread_Control *_Thread_queue_First(
|
||||
const Thread_queue_Operations *operations
|
||||
)
|
||||
{
|
||||
Thread_Control *the_thread;
|
||||
ISR_lock_Context lock_context;
|
||||
Thread_Control *the_thread;
|
||||
Thread_queue_Context queue_context;
|
||||
|
||||
_Thread_queue_Acquire( the_thread_queue, &lock_context );
|
||||
_Thread_queue_Acquire( the_thread_queue, &queue_context );
|
||||
the_thread = _Thread_queue_First_locked( the_thread_queue, operations );
|
||||
_Thread_queue_Release( the_thread_queue, &lock_context );
|
||||
_Thread_queue_Release( the_thread_queue, &queue_context );
|
||||
|
||||
return the_thread;
|
||||
}
|
||||
|
||||
@@ -119,10 +119,7 @@ static void _Thread_Wake_up_joining_threads( Thread_Control *the_thread )
|
||||
#endif
|
||||
|
||||
_Thread_queue_Context_initialize( &join_context.Base );
|
||||
_Thread_queue_Acquire(
|
||||
&the_thread->Join_queue,
|
||||
&join_context.Base.Lock_context
|
||||
);
|
||||
_Thread_queue_Acquire( &the_thread->Join_queue, &join_context.Base );
|
||||
_Thread_queue_Flush_critical(
|
||||
&the_thread->Join_queue.Queue,
|
||||
THREAD_JOIN_TQ_OPERATIONS,
|
||||
|
||||
Reference in New Issue
Block a user