score: Add _Thread_queue_Dispatch_disable()

This commit is contained in:
Sebastian Huber
2017-10-10 10:03:48 +02:00
parent bd5be58fa6
commit db3a3decbd
12 changed files with 25 additions and 46 deletions

View File

@@ -321,9 +321,7 @@ RTEMS_INLINE_ROUTINE Status_Control _POSIX_Mutex_Ceiling_set_owner(
); );
_Thread_Wait_release_default_critical( owner, &lock_context ); _Thread_Wait_release_default_critical( owner, &lock_context );
cpu_self = _Thread_Dispatch_disable_critical( cpu_self = _Thread_queue_Dispatch_disable( queue_context );
&queue_context->Lock_context.Lock_context
);
_POSIX_Mutex_Release( the_mutex, queue_context ); _POSIX_Mutex_Release( the_mutex, queue_context );
_Thread_Priority_update( queue_context ); _Thread_Priority_update( queue_context );
_Thread_Dispatch_enable( cpu_self ); _Thread_Dispatch_enable( cpu_self );
@@ -413,9 +411,7 @@ RTEMS_INLINE_ROUTINE Status_Control _POSIX_Mutex_Ceiling_surrender(
); );
_Thread_Wait_release_default_critical( executing, &lock_context ); _Thread_Wait_release_default_critical( executing, &lock_context );
cpu_self = _Thread_Dispatch_disable_critical( cpu_self = _Thread_queue_Dispatch_disable( queue_context );
&queue_context->Lock_context.Lock_context
);
heads = the_mutex->Recursive.Mutex.Queue.Queue.heads; heads = the_mutex->Recursive.Mutex.Queue.Queue.heads;

View File

@@ -155,9 +155,7 @@ int pthread_setschedparam(
budget_callout, budget_callout,
&queue_context &queue_context
); );
cpu_self = _Thread_Dispatch_disable_critical( cpu_self = _Thread_queue_Dispatch_disable( &queue_context );
&queue_context.Lock_context.Lock_context
);
_Thread_Wait_release( the_thread, &queue_context ); _Thread_Wait_release( the_thread, &queue_context );
_Thread_Priority_update( &queue_context ); _Thread_Priority_update( &queue_context );
_Thread_Dispatch_enable( cpu_self ); _Thread_Dispatch_enable( cpu_self );

View File

@@ -53,9 +53,7 @@ int pthread_setschedprio( pthread_t thread, int prio )
&queue_context &queue_context
); );
cpu_self = _Thread_Dispatch_disable_critical( cpu_self = _Thread_queue_Dispatch_disable( &queue_context );
&queue_context.Lock_context.Lock_context
);
_Thread_Wait_release( the_thread, &queue_context ); _Thread_Wait_release( the_thread, &queue_context );
_Thread_Priority_update( &queue_context ); _Thread_Priority_update( &queue_context );

View File

@@ -110,9 +110,7 @@ static rtems_status_code _Semaphore_Set_priority(
break; break;
} }
cpu_self = _Thread_Dispatch_disable_critical( cpu_self = _Thread_queue_Dispatch_disable( queue_context );
&queue_context->Lock_context.Lock_context
);
_Thread_queue_Release( _Thread_queue_Release(
&the_semaphore->Core_control.Wait_queue, &the_semaphore->Core_control.Wait_queue,
queue_context queue_context

View File

@@ -47,9 +47,7 @@ rtems_status_code rtems_task_delete(
if ( the_thread == executing ) { if ( the_thread == executing ) {
Per_CPU_Control *cpu_self; Per_CPU_Control *cpu_self;
cpu_self = _Thread_Dispatch_disable_critical( cpu_self = _Thread_queue_Dispatch_disable( &context.Base );
&context.Base.Lock_context.Lock_context
);
_ISR_lock_ISR_enable( &context.Base.Lock_context.Lock_context ); _ISR_lock_ISR_enable( &context.Base.Lock_context.Lock_context );
/* /*

View File

@@ -51,9 +51,7 @@ static rtems_status_code _RTEMS_tasks_Set_priority(
false, false,
queue_context queue_context
); );
cpu_self = _Thread_Dispatch_disable_critical( cpu_self = _Thread_queue_Dispatch_disable( queue_context );
&queue_context->Lock_context.Lock_context
);
_Thread_Wait_release( the_thread, queue_context ); _Thread_Wait_release( the_thread, queue_context );
_Thread_Priority_update( queue_context ); _Thread_Priority_update( queue_context );
_Thread_Dispatch_enable( cpu_self ); _Thread_Dispatch_enable( cpu_self );

View File

@@ -58,10 +58,7 @@ rtems_status_code rtems_task_set_scheduler(
return RTEMS_INVALID_ID; return RTEMS_INVALID_ID;
} }
cpu_self = _Thread_Dispatch_disable_critical( cpu_self = _Thread_queue_Dispatch_disable( &queue_context );
&queue_context.Lock_context.Lock_context
);
_Thread_Wait_acquire_critical( the_thread, &queue_context ); _Thread_Wait_acquire_critical( the_thread, &queue_context );
_Thread_State_acquire_critical( the_thread, &state_context ); _Thread_State_acquire_critical( the_thread, &state_context );

View File

@@ -305,9 +305,7 @@ RTEMS_INLINE_ROUTINE Status_Control _CORE_ceiling_mutex_Set_owner(
); );
_Thread_Wait_release_default_critical( owner, &lock_context ); _Thread_Wait_release_default_critical( owner, &lock_context );
cpu_self = _Thread_Dispatch_disable_critical( cpu_self = _Thread_queue_Dispatch_disable( queue_context );
&queue_context->Lock_context.Lock_context
);
_CORE_mutex_Release( &the_mutex->Recursive.Mutex, queue_context ); _CORE_mutex_Release( &the_mutex->Recursive.Mutex, queue_context );
_Thread_Priority_update( queue_context ); _Thread_Priority_update( queue_context );
_Thread_Dispatch_enable( cpu_self ); _Thread_Dispatch_enable( cpu_self );

View File

@@ -179,9 +179,7 @@ RTEMS_INLINE_ROUTINE Status_Control _MRSP_Claim_ownership(
} }
_MRSP_Set_owner( mrsp, executing ); _MRSP_Set_owner( mrsp, executing );
cpu_self = _Thread_Dispatch_disable_critical( cpu_self = _Thread_queue_Dispatch_disable( queue_context );
&queue_context->Lock_context.Lock_context
);
_MRSP_Release( mrsp, queue_context ); _MRSP_Release( mrsp, queue_context );
_Thread_Priority_and_sticky_update( executing, 1 ); _Thread_Priority_and_sticky_update( executing, 1 );
_Thread_Dispatch_enable( cpu_self ); _Thread_Dispatch_enable( cpu_self );

View File

@@ -26,6 +26,7 @@
#include <rtems/score/smp.h> #include <rtems/score/smp.h>
#include <rtems/score/status.h> #include <rtems/score/status.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/threaddispatch.h>
#if defined(RTEMS_DEBUG) #if defined(RTEMS_DEBUG)
#include <string.h> #include <string.h>
@@ -277,6 +278,15 @@ RTEMS_INLINE_ROUTINE void _Thread_queue_Context_set_ISR_level(
); );
} }
RTEMS_INLINE_ROUTINE Per_CPU_Control *_Thread_queue_Dispatch_disable(
Thread_queue_Context *queue_context
)
{
return _Thread_Dispatch_disable_critical(
&queue_context->Lock_context.Lock_context
);
}
/** /**
* @brief Sets the MP callout in the thread queue context. * @brief Sets the MP callout in the thread queue context.
* *

View File

@@ -445,9 +445,7 @@ void _Thread_queue_Enqueue(
the_thread->Wait.return_code = STATUS_SUCCESSFUL; the_thread->Wait.return_code = STATUS_SUCCESSFUL;
_Thread_Wait_flags_set( the_thread, THREAD_QUEUE_INTEND_TO_BLOCK ); _Thread_Wait_flags_set( the_thread, THREAD_QUEUE_INTEND_TO_BLOCK );
cpu_self = _Thread_Dispatch_disable_critical( cpu_self = _Thread_queue_Dispatch_disable( queue_context );
&queue_context->Lock_context.Lock_context
);
_Thread_queue_Queue_release( queue, &queue_context->Lock_context.Lock_context ); _Thread_queue_Queue_release( queue, &queue_context->Lock_context.Lock_context );
( *queue_context->enqueue_callout )( queue, the_thread, queue_context ); ( *queue_context->enqueue_callout )( queue, the_thread, queue_context );
@@ -513,9 +511,7 @@ Status_Control _Thread_queue_Enqueue_sticky(
the_thread->Wait.return_code = STATUS_SUCCESSFUL; the_thread->Wait.return_code = STATUS_SUCCESSFUL;
_Thread_Wait_flags_set( the_thread, THREAD_QUEUE_INTEND_TO_BLOCK ); _Thread_Wait_flags_set( the_thread, THREAD_QUEUE_INTEND_TO_BLOCK );
cpu_self = _Thread_Dispatch_disable_critical( cpu_self = _Thread_queue_Dispatch_disable( queue_context );
&queue_context->Lock_context.Lock_context
);
_Thread_queue_Queue_release( queue, &queue_context->Lock_context.Lock_context ); _Thread_queue_Queue_release( queue, &queue_context->Lock_context.Lock_context );
if ( cpu_self->thread_dispatch_disable_level != 1 ) { if ( cpu_self->thread_dispatch_disable_level != 1 ) {
@@ -715,9 +711,7 @@ void _Thread_queue_Surrender(
unblock = _Thread_queue_Make_ready_again( new_owner ); unblock = _Thread_queue_Make_ready_again( new_owner );
cpu_self = _Thread_Dispatch_disable_critical( cpu_self = _Thread_queue_Dispatch_disable( queue_context );
&queue_context->Lock_context.Lock_context
);
_Thread_queue_Queue_release( _Thread_queue_Queue_release(
queue, queue,
&queue_context->Lock_context.Lock_context &queue_context->Lock_context.Lock_context
@@ -756,9 +750,7 @@ void _Thread_queue_Surrender_sticky(
queue->owner = new_owner; queue->owner = new_owner;
_Thread_queue_Make_ready_again( new_owner ); _Thread_queue_Make_ready_again( new_owner );
cpu_self = _Thread_Dispatch_disable_critical( cpu_self = _Thread_queue_Dispatch_disable( queue_context );
&queue_context->Lock_context.Lock_context
);
_Thread_queue_Queue_release( _Thread_queue_Queue_release(
queue, queue,
&queue_context->Lock_context.Lock_context &queue_context->Lock_context.Lock_context

View File

@@ -115,9 +115,7 @@ size_t _Thread_queue_Flush_critical(
if ( node != tail ) { if ( node != tail ) {
Per_CPU_Control *cpu_self; Per_CPU_Control *cpu_self;
cpu_self = _Thread_Dispatch_disable_critical( cpu_self = _Thread_queue_Dispatch_disable( queue_context );
&queue_context->Lock_context.Lock_context
);
_Thread_queue_Queue_release( queue, &queue_context->Lock_context.Lock_context ); _Thread_queue_Queue_release( queue, &queue_context->Lock_context.Lock_context );
do { do {