summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-08-22 10:58:34 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-09-08 09:55:27 +0200
commite41308eab8ae4505844d8e499664424f8c7f2bd1 (patch)
tree7dffe5edacd3f245ba5ef3b64b431b7e4c74c454
parentscore: Simplify thread queue acquire/release (diff)
downloadrtems-e41308eab8ae4505844d8e499664424f8c7f2bd1.tar.bz2
score: Introduce Thread_queue_Lock_context
Introduce Thread_queue_Lock_context to contain the context necessary for thread queue lock and thread wait lock acquire/release operations to reduce the Thread_Control size.
-rw-r--r--cpukit/libnetworking/rtems/rtems_glue.c4
-rw-r--r--cpukit/posix/include/rtems/posix/barrierimpl.h2
-rw-r--r--cpukit/posix/include/rtems/posix/mqueueimpl.h2
-rw-r--r--cpukit/posix/include/rtems/posix/posixapi.h14
-rw-r--r--cpukit/posix/include/rtems/posix/semaphoreimpl.h2
-rw-r--r--cpukit/posix/src/condwaitsupp.c4
-rw-r--r--cpukit/posix/src/mqueuerecvsupp.c4
-rw-r--r--cpukit/posix/src/mqueuesendsupp.c2
-rw-r--r--cpukit/posix/src/pthreadgetschedparam.c2
-rw-r--r--cpukit/posix/src/pthreadjoin.c18
-rw-r--r--cpukit/posix/src/semunlink.c2
-rw-r--r--cpukit/rtems/include/rtems/rtems/barrierimpl.h7
-rw-r--r--cpukit/rtems/include/rtems/rtems/messageimpl.h2
-rw-r--r--cpukit/rtems/include/rtems/rtems/semimpl.h2
-rw-r--r--cpukit/rtems/src/semcreate.c2
-rw-r--r--cpukit/rtems/src/tasksetscheduler.c6
-rw-r--r--cpukit/score/include/rtems/score/coremuteximpl.h6
-rw-r--r--cpukit/score/include/rtems/score/mrspimpl.h20
-rw-r--r--cpukit/score/include/rtems/score/threadimpl.h80
-rw-r--r--cpukit/score/include/rtems/score/threadq.h112
-rw-r--r--cpukit/score/include/rtems/score/threadqimpl.h12
-rw-r--r--cpukit/score/src/apimutexlock.c2
-rw-r--r--cpukit/score/src/apimutexunlock.c2
-rw-r--r--cpukit/score/src/condition.c26
-rw-r--r--cpukit/score/src/coremsgbroadcast.c2
-rw-r--r--cpukit/score/src/coremutexseize.c2
-rw-r--r--cpukit/score/src/futex.c6
-rw-r--r--cpukit/score/src/mpci.c4
-rw-r--r--cpukit/score/src/mutex.c6
-rw-r--r--cpukit/score/src/semaphore.c6
-rw-r--r--cpukit/score/src/threadqenqueue.c52
-rw-r--r--cpukit/score/src/threadqflush.c6
-rw-r--r--cpukit/score/src/threadrestart.c2
-rw-r--r--testsuites/sptests/spintrcritical22/init.c2
-rw-r--r--testsuites/tmtests/tm26/task1.c2
35 files changed, 237 insertions, 188 deletions
diff --git a/cpukit/libnetworking/rtems/rtems_glue.c b/cpukit/libnetworking/rtems/rtems_glue.c
index 2fca0e0902..9a7f82f514 100644
--- a/cpukit/libnetworking/rtems/rtems_glue.c
+++ b/cpukit/libnetworking/rtems/rtems_glue.c
@@ -375,7 +375,7 @@ rtems_bsdnet_semaphore_obtain (void)
if (!the_networkSemaphore)
rtems_panic ("rtems-net: network sema obtain: network not initialised\n");
_Thread_queue_Context_initialize(&queue_context);
- _ISR_lock_ISR_disable(&queue_context.Lock_context);
+ _ISR_lock_ISR_disable(&queue_context.Lock_context.Lock_context);
_Thread_queue_Context_set_no_timeout( &queue_context );
status = _CORE_recursive_mutex_Seize (
&the_networkSemaphore->Core_control.Mutex.Recursive,
@@ -409,7 +409,7 @@ rtems_bsdnet_semaphore_release (void)
if (!the_networkSemaphore)
rtems_panic ("rtems-net: network sema obtain: network not initialised\n");
_Thread_queue_Context_initialize(&queue_context);
- _ISR_lock_ISR_disable(&queue_context.Lock_context);
+ _ISR_lock_ISR_disable(&queue_context.Lock_context.Lock_context);
status = _CORE_recursive_mutex_Surrender(
&the_networkSemaphore->Core_control.Mutex.Recursive,
_Thread_Executing,
diff --git a/cpukit/posix/include/rtems/posix/barrierimpl.h b/cpukit/posix/include/rtems/posix/barrierimpl.h
index 2fbc2f9172..fae66a6171 100644
--- a/cpukit/posix/include/rtems/posix/barrierimpl.h
+++ b/cpukit/posix/include/rtems/posix/barrierimpl.h
@@ -71,7 +71,7 @@ RTEMS_INLINE_ROUTINE POSIX_Barrier_Control *_POSIX_Barrier_Get(
_Thread_queue_Context_initialize( queue_context );
return (POSIX_Barrier_Control *) _Objects_Get(
(Objects_Id) *barrier,
- &queue_context->Lock_context,
+ &queue_context->Lock_context.Lock_context,
&_POSIX_Barrier_Information
);
}
diff --git a/cpukit/posix/include/rtems/posix/mqueueimpl.h b/cpukit/posix/include/rtems/posix/mqueueimpl.h
index 62ddbef8f8..5888800ca1 100644
--- a/cpukit/posix/include/rtems/posix/mqueueimpl.h
+++ b/cpukit/posix/include/rtems/posix/mqueueimpl.h
@@ -114,7 +114,7 @@ RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control *_POSIX_Message_queue_Get(
_Thread_queue_Context_initialize( queue_context );
return (POSIX_Message_queue_Control *) _Objects_Get(
id,
- &queue_context->Lock_context,
+ &queue_context->Lock_context.Lock_context,
&_POSIX_Message_queue_Information
);
}
diff --git a/cpukit/posix/include/rtems/posix/posixapi.h b/cpukit/posix/include/rtems/posix/posixapi.h
index fabde4d6f9..12baa75eea 100644
--- a/cpukit/posix/include/rtems/posix/posixapi.h
+++ b/cpukit/posix/include/rtems/posix/posixapi.h
@@ -105,16 +105,22 @@ RTEMS_INLINE_ROUTINE int _POSIX_Zero_or_minus_one_plus_errno(
if ( id == NULL ) { \
return NULL; \
} \
- the_object = \
- _Objects_Get( (Objects_Id) *id, &queue_context->Lock_context, info ); \
+ the_object = _Objects_Get( \
+ (Objects_Id) *id, \
+ &queue_context->Lock_context.Lock_context, \
+ info \
+ ); \
if ( the_object == NULL ) { \
_Once_Lock(); \
if ( *id == initializer ) { \
init( id, NULL ); \
} \
_Once_Unlock(); \
- the_object = \
- _Objects_Get( (Objects_Id) *id, &queue_context->Lock_context, info ); \
+ the_object = _Objects_Get( \
+ (Objects_Id) *id, \
+ &queue_context->Lock_context.Lock_context, \
+ info \
+ ); \
} \
return (type *) the_object
diff --git a/cpukit/posix/include/rtems/posix/semaphoreimpl.h b/cpukit/posix/include/rtems/posix/semaphoreimpl.h
index 17d3f64e92..2bafbe9b97 100644
--- a/cpukit/posix/include/rtems/posix/semaphoreimpl.h
+++ b/cpukit/posix/include/rtems/posix/semaphoreimpl.h
@@ -64,7 +64,7 @@ RTEMS_INLINE_ROUTINE POSIX_Semaphore_Control *_POSIX_Semaphore_Get(
_Thread_queue_Context_initialize( queue_context );
return (POSIX_Semaphore_Control *) _Objects_Get(
(Objects_Id) *id,
- &queue_context->Lock_context,
+ &queue_context->Lock_context.Lock_context,
&_POSIX_Semaphore_Information
);
}
diff --git a/cpukit/posix/src/condwaitsupp.c b/cpukit/posix/src/condwaitsupp.c
index 92793ed3a4..52367f6364 100644
--- a/cpukit/posix/src/condwaitsupp.c
+++ b/cpukit/posix/src/condwaitsupp.c
@@ -92,7 +92,9 @@ int _POSIX_Condition_variables_Wait_support(
the_cond->mutex = *mutex;
- cpu_self = _Thread_Dispatch_disable_critical( &queue_context.Lock_context );
+ cpu_self = _Thread_Dispatch_disable_critical(
+ &queue_context.Lock_context.Lock_context
+ );
executing = _Per_CPU_Get_executing( cpu_self );
if ( !already_timedout ) {
diff --git a/cpukit/posix/src/mqueuerecvsupp.c b/cpukit/posix/src/mqueuerecvsupp.c
index dcb81787a1..f91a513181 100644
--- a/cpukit/posix/src/mqueuerecvsupp.c
+++ b/cpukit/posix/src/mqueuerecvsupp.c
@@ -58,12 +58,12 @@ ssize_t _POSIX_Message_queue_Receive_support(
}
if ( ( the_mq->oflag & O_ACCMODE ) == O_WRONLY ) {
- _ISR_lock_ISR_enable( &queue_context.Lock_context );
+ _ISR_lock_ISR_enable( &queue_context.Lock_context.Lock_context );
rtems_set_errno_and_return_minus_one( EBADF );
}
if ( msg_len < the_mq->Message_queue.maximum_message_size ) {
- _ISR_lock_ISR_enable( &queue_context.Lock_context );
+ _ISR_lock_ISR_enable( &queue_context.Lock_context.Lock_context );
rtems_set_errno_and_return_minus_one( EMSGSIZE );
}
diff --git a/cpukit/posix/src/mqueuesendsupp.c b/cpukit/posix/src/mqueuesendsupp.c
index 3fd51a4eeb..c975a95505 100644
--- a/cpukit/posix/src/mqueuesendsupp.c
+++ b/cpukit/posix/src/mqueuesendsupp.c
@@ -65,7 +65,7 @@ int _POSIX_Message_queue_Send_support(
}
if ( ( the_mq->oflag & O_ACCMODE ) == O_RDONLY ) {
- _ISR_lock_ISR_enable( &queue_context.Lock_context );
+ _ISR_lock_ISR_enable( &queue_context.Lock_context.Lock_context );
rtems_set_errno_and_return_minus_one( EBADF );
}
diff --git a/cpukit/posix/src/pthreadgetschedparam.c b/cpukit/posix/src/pthreadgetschedparam.c
index 1b7c731587..38e0b4f9b5 100644
--- a/cpukit/posix/src/pthreadgetschedparam.c
+++ b/cpukit/posix/src/pthreadgetschedparam.c
@@ -45,7 +45,7 @@ int pthread_getschedparam(
return EINVAL;
}
- the_thread = _Thread_Get( thread, &queue_context.Lock_context );
+ the_thread = _Thread_Get( thread, &queue_context.Lock_context.Lock_context );
if ( the_thread == NULL ) {
return ESRCH;
diff --git a/cpukit/posix/src/pthreadjoin.c b/cpukit/posix/src/pthreadjoin.c
index 641031c20d..5ed01185f1 100644
--- a/cpukit/posix/src/pthreadjoin.c
+++ b/cpukit/posix/src/pthreadjoin.c
@@ -41,7 +41,7 @@ static int _POSIX_Threads_Join( pthread_t thread, void **value_ptr )
_Thread_queue_Context_initialize( &queue_context );
_Thread_queue_Context_set_expected_level( &queue_context, 1 );
_Thread_queue_Context_set_no_timeout( &queue_context );
- the_thread = _Thread_Get( thread, &queue_context.Lock_context );
+ the_thread = _Thread_Get( thread, &queue_context.Lock_context.Lock_context );
if ( the_thread == NULL ) {
return ESRCH;
@@ -51,22 +51,28 @@ static int _POSIX_Threads_Join( pthread_t thread, void **value_ptr )
executing = _Per_CPU_Get_executing( cpu_self );
if ( executing == the_thread ) {
- _ISR_lock_ISR_enable( &queue_context.Lock_context );
+ _ISR_lock_ISR_enable( &queue_context.Lock_context.Lock_context );
return EDEADLK;
}
- _Thread_State_acquire_critical( the_thread, &queue_context.Lock_context );
+ _Thread_State_acquire_critical(
+ the_thread,
+ &queue_context.Lock_context.Lock_context
+ );
if ( !_Thread_Is_joinable( the_thread ) ) {
- _Thread_State_release( the_thread, &queue_context.Lock_context );
+ _Thread_State_release( the_thread, &queue_context.Lock_context.Lock_context );
return EINVAL;
}
if ( _States_Is_waiting_for_join_at_exit( the_thread->current_state ) ) {
value = the_thread->Life.exit_value;
_Thread_Clear_state_locked( the_thread, STATES_WAITING_FOR_JOIN_AT_EXIT );
- _Thread_Dispatch_disable_with_CPU( cpu_self, &queue_context.Lock_context );
- _Thread_State_release( the_thread, &queue_context.Lock_context );
+ _Thread_Dispatch_disable_with_CPU(
+ cpu_self,
+ &queue_context.Lock_context.Lock_context
+ );
+ _Thread_State_release( the_thread, &queue_context.Lock_context.Lock_context );
_Thread_Dispatch_enable( cpu_self );
} else {
_Thread_Join(
diff --git a/cpukit/posix/src/semunlink.c b/cpukit/posix/src/semunlink.c
index 6ba1df17a4..02fcdcab1b 100644
--- a/cpukit/posix/src/semunlink.c
+++ b/cpukit/posix/src/semunlink.c
@@ -40,7 +40,7 @@ int sem_unlink(
_POSIX_Semaphore_Namespace_remove( the_semaphore );
- _ISR_lock_ISR_disable( &queue_context.Lock_context );
+ _ISR_lock_ISR_disable( &queue_context.Lock_context.Lock_context );
_CORE_semaphore_Acquire_critical( &the_semaphore->Semaphore, &queue_context );
the_semaphore->linked = false;
_POSIX_Semaphore_Delete( the_semaphore, &queue_context );
diff --git a/cpukit/rtems/include/rtems/rtems/barrierimpl.h b/cpukit/rtems/include/rtems/rtems/barrierimpl.h
index 91834b8362..f0b53e0cab 100644
--- a/cpukit/rtems/include/rtems/rtems/barrierimpl.h
+++ b/cpukit/rtems/include/rtems/rtems/barrierimpl.h
@@ -75,8 +75,11 @@ RTEMS_INLINE_ROUTINE Barrier_Control *_Barrier_Get(
)
{
_Thread_queue_Context_initialize( queue_context );
- return (Barrier_Control *)
- _Objects_Get( id, &queue_context->Lock_context, &_Barrier_Information );
+ return (Barrier_Control *) _Objects_Get(
+ id,
+ &queue_context->Lock_context.Lock_context,
+ &_Barrier_Information
+ );
}
/**@}*/
diff --git a/cpukit/rtems/include/rtems/rtems/messageimpl.h b/cpukit/rtems/include/rtems/rtems/messageimpl.h
index 9c1da39975..df7cea6829 100644
--- a/cpukit/rtems/include/rtems/rtems/messageimpl.h
+++ b/cpukit/rtems/include/rtems/rtems/messageimpl.h
@@ -95,7 +95,7 @@ RTEMS_INLINE_ROUTINE Message_queue_Control *_Message_queue_Get(
_Thread_queue_Context_initialize( queue_context );
return (Message_queue_Control *) _Objects_Get(
id,
- &queue_context->Lock_context,
+ &queue_context->Lock_context.Lock_context,
&_Message_queue_Information
);
}
diff --git a/cpukit/rtems/include/rtems/rtems/semimpl.h b/cpukit/rtems/include/rtems/rtems/semimpl.h
index 3259916d52..48b0a84c68 100644
--- a/cpukit/rtems/include/rtems/rtems/semimpl.h
+++ b/cpukit/rtems/include/rtems/rtems/semimpl.h
@@ -99,7 +99,7 @@ RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Get(
_Thread_queue_Context_initialize( queue_context );
return (Semaphore_Control *) _Objects_Get(
id,
- &queue_context->Lock_context,
+ &queue_context->Lock_context.Lock_context,
&_Semaphore_Information
);
}
diff --git a/cpukit/rtems/src/semcreate.c b/cpukit/rtems/src/semcreate.c
index 7d49542203..77ecdd7688 100644
--- a/cpukit/rtems/src/semcreate.c
+++ b/cpukit/rtems/src/semcreate.c
@@ -171,7 +171,7 @@ rtems_status_code rtems_semaphore_create(
Thread_queue_Context queue_context;
_Thread_queue_Context_initialize( &queue_context );
- _ISR_lock_ISR_disable( &queue_context.Lock_context );
+ _ISR_lock_ISR_disable( &queue_context.Lock_context.Lock_context );
_CORE_mutex_Acquire_critical(
&the_semaphore->Core_control.Mutex.Recursive.Mutex,
&queue_context
diff --git a/cpukit/rtems/src/tasksetscheduler.c b/cpukit/rtems/src/tasksetscheduler.c
index 3546e6fb67..3a860a197b 100644
--- a/cpukit/rtems/src/tasksetscheduler.c
+++ b/cpukit/rtems/src/tasksetscheduler.c
@@ -45,7 +45,7 @@ rtems_status_code rtems_task_set_scheduler(
}
_Thread_queue_Context_initialize( &queue_context );
- the_thread = _Thread_Get( task_id, &queue_context.Lock_context );
+ the_thread = _Thread_Get( task_id, &queue_context.Lock_context.Lock_context );
if ( the_thread == NULL ) {
#if defined(RTEMS_MULTIPROCESSING)
@@ -57,7 +57,9 @@ rtems_status_code rtems_task_set_scheduler(
return RTEMS_INVALID_ID;
}
- cpu_self = _Thread_Dispatch_disable_critical( &queue_context.Lock_context );
+ cpu_self = _Thread_Dispatch_disable_critical(
+ &queue_context.Lock_context.Lock_context
+ );
_Thread_Wait_acquire_critical( the_thread, &queue_context );
_Thread_State_acquire_critical( the_thread, &state_context );
diff --git a/cpukit/score/include/rtems/score/coremuteximpl.h b/cpukit/score/include/rtems/score/coremuteximpl.h
index 680c6d5eaf..d40d91c4fd 100644
--- a/cpukit/score/include/rtems/score/coremuteximpl.h
+++ b/cpukit/score/include/rtems/score/coremuteximpl.h
@@ -408,7 +408,9 @@ RTEMS_INLINE_ROUTINE Status_Control _CORE_ceiling_mutex_Set_owner(
return STATUS_SUCCESSFUL;
}
- cpu_self = _Thread_Dispatch_disable_critical( &queue_context->Lock_context );
+ cpu_self = _Thread_Dispatch_disable_critical(
+ &queue_context->Lock_context.Lock_context
+ );
_CORE_mutex_Release( &the_mutex->Recursive.Mutex, queue_context );
_Thread_Raise_priority( owner, priority_ceiling );
_Thread_Dispatch_enable( cpu_self );
@@ -524,7 +526,7 @@ RTEMS_INLINE_ROUTINE Status_Control _CORE_ceiling_mutex_Surrender(
unblock,
&the_mutex->Recursive.Mutex.Wait_queue.Queue,
new_owner,
- &queue_context->Lock_context
+ &queue_context->Lock_context.Lock_context
);
} else {
_CORE_mutex_Release( &the_mutex->Recursive.Mutex, queue_context );
diff --git a/cpukit/score/include/rtems/score/mrspimpl.h b/cpukit/score/include/rtems/score/mrspimpl.h
index 593d846b9c..5f639d7e04 100644
--- a/cpukit/score/include/rtems/score/mrspimpl.h
+++ b/cpukit/score/include/rtems/score/mrspimpl.h
@@ -126,7 +126,9 @@ RTEMS_INLINE_ROUTINE void _MRSP_Claim_ownership(
mrsp->initial_priority_of_owner = initial_priority;
_Scheduler_Thread_change_help_state( new_owner, SCHEDULER_HELP_ACTIVE_OWNER );
- cpu_self = _Thread_Dispatch_disable_critical( &queue_context->Lock_context );
+ cpu_self = _Thread_Dispatch_disable_critical(
+ &queue_context->Lock_context.Lock_context
+ );
_MRSP_Release( mrsp, queue_context );
_Thread_Raise_priority( new_owner, ceiling_priority );
@@ -207,7 +209,7 @@ RTEMS_INLINE_ROUTINE void _MRSP_Timeout( Watchdog_Control *watchdog )
Thread_queue_Context queue_context;
_Thread_queue_Context_initialize( &queue_context );
- _ISR_lock_ISR_disable( &queue_context.Lock_context );
+ _ISR_lock_ISR_disable( &queue_context.Lock_context.Lock_context );
_MRSP_Acquire_critical( mrsp, &queue_context );
if ( rival->status == MRSP_WAIT_FOR_OWNERSHIP ) {
@@ -270,7 +272,9 @@ RTEMS_INLINE_ROUTINE Status_Control _MRSP_Wait_for_ownership(
_MRSP_Giant_release( &giant_lock_context );
- cpu_self = _Thread_Dispatch_disable_critical( &queue_context->Lock_context );
+ cpu_self = _Thread_Dispatch_disable_critical(
+ &queue_context->Lock_context.Lock_context
+ );
_MRSP_Release( mrsp, queue_context );
_Thread_Raise_priority( executing, ceiling_priority );
@@ -330,7 +334,7 @@ RTEMS_INLINE_ROUTINE Status_Control _MRSP_Seize(
Resource_Node *owner;
if ( !priority_ok) {
- _ISR_lock_ISR_enable( &queue_context->Lock_context );
+ _ISR_lock_ISR_enable( &queue_context->Lock_context.Lock_context );
return STATUS_MUTEX_CEILING_VIOLATED;
}
@@ -377,7 +381,7 @@ RTEMS_INLINE_ROUTINE Status_Control _MRSP_Surrender(
ISR_lock_Context giant_lock_context;
if ( _Resource_Get_owner( &mrsp->Resource ) != &executing->Resource_node ) {
- _ISR_lock_ISR_enable( &queue_context->Lock_context );
+ _ISR_lock_ISR_enable( &queue_context->Lock_context.Lock_context );
return STATUS_NOT_OWNER;
}
@@ -387,7 +391,7 @@ RTEMS_INLINE_ROUTINE Status_Control _MRSP_Surrender(
&executing->Resource_node
)
) {
- _ISR_lock_ISR_enable( &queue_context->Lock_context );
+ _ISR_lock_ISR_enable( &queue_context->Lock_context.Lock_context );
return STATUS_RELEASE_ORDER_VIOLATION;
}
@@ -428,7 +432,9 @@ RTEMS_INLINE_ROUTINE Status_Control _MRSP_Surrender(
_MRSP_Giant_release( &giant_lock_context );
- cpu_self = _Thread_Dispatch_disable_critical( &queue_context->Lock_context );
+ cpu_self = _Thread_Dispatch_disable_critical(
+ &queue_context->Lock_context.Lock_context
+ );
_MRSP_Release( mrsp, queue_context );
_MRSP_Restore_priority( executing, initial_priority );
diff --git a/cpukit/score/include/rtems/score/threadimpl.h b/cpukit/score/include/rtems/score/threadimpl.h
index 72e0ba3655..03c1ed8088 100644
--- a/cpukit/score/include/rtems/score/threadimpl.h
+++ b/cpukit/score/include/rtems/score/threadimpl.h
@@ -1031,16 +1031,16 @@ RTEMS_INLINE_ROUTINE void _Thread_Wait_release_default(
#if defined(RTEMS_SMP)
#define THREAD_QUEUE_CONTEXT_OF_REQUEST( node ) \
- RTEMS_CONTAINER_OF( node, Thread_queue_Context, Wait.Gate.Node )
+ RTEMS_CONTAINER_OF( node, Thread_queue_Context, Lock_context.Wait.Gate.Node )
RTEMS_INLINE_ROUTINE void _Thread_Wait_remove_request_locked(
- Thread_Control *the_thread,
- Thread_queue_Context *queue_context
+ Thread_Control *the_thread,
+ Thread_queue_Lock_context *queue_lock_context
)
{
Chain_Node *first;
- _Chain_Extract_unprotected( &queue_context->Wait.Gate.Node );
+ _Chain_Extract_unprotected( &queue_lock_context->Wait.Gate.Node );
first = _Chain_First( &the_thread->Wait.Lock.Pending_requests );
if ( first != _Chain_Tail( &the_thread->Wait.Lock.Pending_requests ) ) {
@@ -1049,25 +1049,25 @@ RTEMS_INLINE_ROUTINE void _Thread_Wait_remove_request_locked(
}
RTEMS_INLINE_ROUTINE void _Thread_Wait_acquire_queue_critical(
- Thread_queue_Queue *queue,
- Thread_queue_Context *queue_context
+ Thread_queue_Queue *queue,
+ Thread_queue_Lock_context *queue_lock_context
)
{
_Thread_queue_Queue_acquire_critical(
queue,
&_Thread_Executing->Potpourri_stats,
- &queue_context->Lock_context
+ &queue_lock_context->Lock_context
);
}
RTEMS_INLINE_ROUTINE void _Thread_Wait_release_queue_critical(
- Thread_queue_Queue *queue,
- Thread_queue_Context *queue_context
+ Thread_queue_Queue *queue,
+ Thread_queue_Lock_context *queue_lock_context
)
{
_Thread_queue_Queue_release_critical(
queue,
- &queue_context->Lock_context
+ &queue_lock_context->Lock_context
);
}
#endif
@@ -1092,30 +1092,36 @@ RTEMS_INLINE_ROUTINE void _Thread_Wait_acquire_critical(
_Thread_Wait_acquire_default_critical(
the_thread,
- &queue_context->Lock_context
+ &queue_context->Lock_context.Lock_context
);
queue = the_thread->Wait.queue;
- queue_context->Wait.queue = queue;
+ queue_context->Lock_context.Wait.queue = queue;
if ( queue != NULL ) {
_Thread_queue_Gate_add(
&the_thread->Wait.Lock.Pending_requests,
- &queue_context->Wait.Gate
+ &queue_context->Lock_context.Wait.Gate
);
_Thread_Wait_release_default_critical(
the_thread,
- &queue_context->Lock_context
+ &queue_context->Lock_context.Lock_context
);
- _Thread_Wait_acquire_queue_critical( queue, queue_context );
+ _Thread_Wait_acquire_queue_critical( queue, &queue_context->Lock_context );
- if ( queue_context->Wait.queue == NULL ) {
- _Thread_Wait_release_queue_critical( queue, queue_context );
+ if ( queue_context->Lock_context.Wait.queue == NULL ) {
+ _Thread_Wait_release_queue_critical(
+ queue,
+ &queue_context->Lock_context
+ );
_Thread_Wait_acquire_default_critical(
the_thread,
+ &queue_context->Lock_context.Lock_context
+ );
+ _Thread_Wait_remove_request_locked(
+ the_thread,
&queue_context->Lock_context
);
- _Thread_Wait_remove_request_locked( the_thread, queue_context );
_Assert( the_thread->Wait.queue == NULL );
}
}
@@ -1138,7 +1144,7 @@ RTEMS_INLINE_ROUTINE void _Thread_Wait_acquire(
)
{
_Thread_queue_Context_initialize( queue_context );
- _ISR_lock_ISR_disable( &queue_context->Lock_context );
+ _ISR_lock_ISR_disable( &queue_context->Lock_context.Lock_context );
_Thread_Wait_acquire_critical( the_thread, queue_context );
}
@@ -1160,21 +1166,25 @@ RTEMS_INLINE_ROUTINE void _Thread_Wait_release_critical(
#if defined(RTEMS_SMP)
Thread_queue_Queue *queue;
- queue = queue_context->Wait.queue;
+ queue = queue_context->Lock_context.Wait.queue;
if ( queue != NULL ) {
- _Thread_Wait_release_queue_critical( queue, queue_context );
+ _Thread_Wait_release_queue_critical(
+ queue, &queue_context->Lock_context
+ );
_Thread_Wait_acquire_default_critical(
the_thread,
+ &queue_context->Lock_context.Lock_context
+ );
+ _Thread_Wait_remove_request_locked(
+ the_thread,
&queue_context->Lock_context
);
-
- _Thread_Wait_remove_request_locked( the_thread, queue_context );
}
_Thread_Wait_release_default_critical(
the_thread,
- &queue_context->Lock_context
+ &queue_context->Lock_context.Lock_context
);
#else
(void) the_thread;
@@ -1196,7 +1206,7 @@ RTEMS_INLINE_ROUTINE void _Thread_Wait_release(
)
{
_Thread_Wait_release_critical( the_thread, queue_context );
- _ISR_lock_ISR_enable( &queue_context->Lock_context );
+ _ISR_lock_ISR_enable( &queue_context->Lock_context.Lock_context );
}
/**
@@ -1243,23 +1253,23 @@ RTEMS_INLINE_ROUTINE void _Thread_Wait_claim(
* On other configurations, this function does nothing.
*
* @param[in] the_thread The thread.
- * @param[in] queue_context The thread queue context used for corresponding
- * _Thread_Wait_acquire().
+ * @param[in] queue_lock_context The thread queue lock context used for
+ * corresponding _Thread_Wait_acquire().
*/
RTEMS_INLINE_ROUTINE void _Thread_Wait_remove_request(
- Thread_Control *the_thread,
- Thread_queue_Context *queue_context
+ Thread_Control *the_thread,
+ Thread_queue_Lock_context *queue_lock_context
)
{
#if defined(RTEMS_SMP)
ISR_lock_Context lock_context;
_Thread_Wait_acquire_default( the_thread, &lock_context );
- _Thread_Wait_remove_request_locked( the_thread, queue_context );
+ _Thread_Wait_remove_request_locked( the_thread, queue_lock_context );
_Thread_Wait_release_default( the_thread, &lock_context );
#else
(void) the_thread;
- (void) queue_context;
+ (void) queue_lock_context;
#endif
}
@@ -1294,7 +1304,7 @@ RTEMS_INLINE_ROUTINE void _Thread_Wait_restore_default(
Thread_queue_Context *queue_context;
queue_context = THREAD_QUEUE_CONTEXT_OF_REQUEST( node );
- queue_context->Wait.queue = NULL;
+ queue_context->Lock_context.Wait.queue = NULL;
node = _Chain_Next( node );
} while ( node != tail );
@@ -1363,15 +1373,15 @@ RTEMS_INLINE_ROUTINE void _Thread_Wait_cancel(
#if defined(RTEMS_SMP)
if ( queue != NULL ) {
- _Assert( queue_context->Wait.queue == queue );
+ _Assert( queue_context->Lock_context.Wait.queue == queue );
#endif
( *the_thread->Wait.operations->extract )( queue, the_thread );
_Thread_Wait_restore_default( the_thread );
#if defined(RTEMS_SMP)
- _Assert( queue_context->Wait.queue == NULL );
- queue_context->Wait.queue = queue;
+ _Assert( queue_context->Lock_context.Wait.queue == NULL );
+ queue_context->Lock_context.Wait.queue = queue;
}
#endif
}
diff --git a/cpukit/score/include/rtems/score/threadq.h b/cpukit/score/include/rtems/score/threadq.h
index 48e951eef1..a4ad0827a3 100644
--- a/cpukit/score/include/rtems/score/threadq.h
+++ b/cpukit/score/include/rtems/score/threadq.h
@@ -95,11 +95,6 @@ typedef struct {
} Thread_queue_Gate;
#endif
-/**
- * @brief Thread queue context for the thread queue methods.
- *
- * @see _Thread_queue_Context_initialize().
- */
typedef struct {
/**
* @brief The lock context for the thread queue acquire and release
@@ -107,50 +102,6 @@ typedef struct {
*/
ISR_lock_Context Lock_context;
- /**
- * @brief The expected thread dispatch disable level for
- * _Thread_queue_Enqueue_critical().
- *
- * In case the actual thread dispatch disable level is not equal to the
- * expected level, then a fatal error occurs.
- */
- uint32_t expected_thread_dispatch_disable_level;
-
- /**
- * @brief The clock discipline for the interval timeout.
- * Use WATCHDOG_NO_TIMEOUT to block indefinitely.
- */
- Watchdog_Discipline timeout_discipline;
-
- /**
- * @brief Interval to wait.
- */
- uint64_t timeout;
-
- /**
- * @brief Invoked in case of a detected deadlock.
- *
- * Must be initialized for _Thread_queue_Enqueue_critical() in case the
- * thread queue may have an owner, e.g. for mutex objects.
- *
- * @see _Thread_queue_Context_set_deadlock_callout().
- */
- Thread_queue_Deadlock_callout deadlock_callout;
-
-#if defined(RTEMS_MULTIPROCESSING)
- /**
- * @brief Callout to unblock the thread in case it is actually a thread
- * proxy.
- *
- * This field is only used on multiprocessing configurations. Used by
- * thread queue extract and unblock methods for objects with multiprocessing
- * (MP) support.
- *
- * @see _Thread_queue_Context_set_MP_callout().
- */
- Thread_queue_MP_callout mp_callout;
-#endif
-
#if defined(RTEMS_SMP)
/**
* @brief Data to support thread queue enqueue operations.
@@ -169,7 +120,7 @@ typedef struct {
Thread_queue_Queue *queue;
} Wait;
#endif
-} Thread_queue_Context;
+} Thread_queue_Lock_context;
#if defined(RTEMS_SMP)
/**
@@ -205,14 +156,71 @@ typedef struct {
Thread_Control *owner;
/**
- * @brief The queue context used to acquire the thread wait lock of the
+ * @brief The queue lock context used to acquire the thread wait lock of the
* owner.
*/
- Thread_queue_Context Queue_context;
+ Thread_queue_Lock_context Lock_context;
} Thread_queue_Link;
#endif
/**
+ * @brief Thread queue context for the thread queue methods.
+ *
+ * @see _Thread_queue_Context_initialize().
+ */
+typedef struct {
+ /**
+ * @brief The lock context for the thread queue acquire and release
+ * operations.
+ */
+ Thread_queue_Lock_context Lock_context;
+
+ /**
+ * @brief The expected thread dispatch disable level for
+ * _Thread_queue_Enqueue_critical().
+ *
+ * In case the actual thread dispatch disable level is not equal to the
+ * expected level, then a fatal error occurs.
+ */
+ uint32_t expected_thread_dispatch_disable_level;
+
+ /**
+ * @brief The clock discipline for the interval timeout.
+ * Use WATCHDOG_NO_TIMEOUT to block indefinitely.
+ */
+ Watchdog_Discipline timeout_discipline;
+
+ /**
+ * @brief Interval to wait.
+ */
+ uint64_t timeout;
+
+ /**
+ * @brief Invoked in case of a detected deadlock.
+ *
+ * Must be initialized for _Thread_queue_Enqueue_critical() in case the
+ * thread queue may have an owner, e.g. for mutex objects.
+ *
+ * @see _Thread_queue_Context_set_deadlock_callout().
+ */
+ Thread_queue_Deadlock_callout deadlock_callout;
+
+#if defined(RTEMS_MULTIPROCESSING)
+ /**
+ * @brief Callout to unblock the thread in case it is actually a thread
+ * proxy.
+ *
+ * This field is only used on multiprocessing configurations. Used by
+ * thread queue extract and unblock methods for objects with multiprocessing
+ * (MP) support.
+ *
+ * @see _Thread_queue_Context_set_MP_callout().
+ */
+ Thread_queue_MP_callout mp_callout;
+#endif
+} Thread_queue_Context;
+
+/**
* @brief Thread priority queue.
*/
typedef struct {
diff --git a/cpukit/score/include/rtems/score/threadqimpl.h b/cpukit/score/include/rtems/score/threadqimpl.h
index 641c618b1d..977b0ceb38 100644
--- a/cpukit/score/include/rtems/score/threadqimpl.h
+++ b/cpukit/score/include/rtems/score/threadqimpl.h
@@ -372,7 +372,7 @@ RTEMS_INLINE_ROUTINE void _Thread_queue_Acquire_critical(
{
_Thread_queue_Do_acquire_critical(
the_thread_queue,
- &queue_context->Lock_context
+ &queue_context->Lock_context.Lock_context
);
}
@@ -381,7 +381,7 @@ RTEMS_INLINE_ROUTINE void _Thread_queue_Acquire(
Thread_queue_Context *queue_context
)
{
- _ISR_lock_ISR_disable( &queue_context->Lock_context );
+ _ISR_lock_ISR_disable( &queue_context->Lock_context.Lock_context );
_Thread_queue_Acquire_critical( the_thread_queue, queue_context );
}
@@ -422,7 +422,7 @@ RTEMS_INLINE_ROUTINE void _Thread_queue_Release_critical(
{
_Thread_queue_Do_release_critical(
the_thread_queue,
- &queue_context->Lock_context
+ &queue_context->Lock_context.Lock_context
);
}
@@ -432,7 +432,7 @@ RTEMS_INLINE_ROUTINE void _Thread_queue_Release(
)
{
_Thread_queue_Release_critical( the_thread_queue, queue_context );
- _ISR_lock_ISR_enable( &queue_context->Lock_context );
+ _ISR_lock_ISR_enable( &queue_context->Lock_context.Lock_context );
}
Thread_Control *_Thread_queue_Do_dequeue(
@@ -511,13 +511,13 @@ Thread_Control *_Thread_queue_Do_dequeue(
* Thread_Control *executing;
*
* _Thread_queue_Context_initialize( &queue_context );
- * _Thread_queue_Acquire( &mutex->Queue, &queue_context.Lock_context );
+ * _Thread_queue_Acquire( &mutex->Queue, queue_context );
*
* executing = _Thread_Executing;
*
* if ( mutex->owner == NULL ) {
* mutex->owner = executing;
- * _Thread_queue_Release( &mutex->Queue, &queue_context.Lock_context );
+ * _Thread_queue_Release( &mutex->Queue, queue_context );
* } else {
* _Thread_queue_Context_set_expected_level( &queue_context, 1 );
* _Thread_queue_Enqueue_critical(
diff --git a/cpukit/score/src/apimutexlock.c b/cpukit/score/src/apimutexlock.c
index f69cfdea64..cf90a76f1e 100644
--- a/cpukit/score/src/apimutexlock.c
+++ b/cpukit/score/src/apimutexlock.c
@@ -32,7 +32,7 @@ void _API_Mutex_Lock( API_Mutex_Control *the_mutex )
_Thread_Set_life_protection( THREAD_LIFE_PROTECTED );
_Thread_queue_Context_initialize( &queue_context );
- _ISR_lock_ISR_disable( &queue_context.Lock_context );
+ _ISR_lock_ISR_disable( &queue_context.Lock_context.Lock_context );
_Thread_queue_Context_set_no_timeout( &queue_context );
_CORE_recursive_mutex_Seize(
&the_mutex->Mutex,
diff --git a/cpukit/score/src/apimutexunlock.c b/cpukit/score/src/apimutexunlock.c
index 67188db144..f04e47a46e 100644
--- a/cpukit/score/src/apimutexunlock.c
+++ b/cpukit/score/src/apimutexunlock.c
@@ -32,7 +32,7 @@ void _API_Mutex_Unlock( API_Mutex_Control *the_mutex )
restore_thread_life_protection = the_mutex->Mutex.nest_level == 0;
_Thread_queue_Context_initialize( &queue_context );
- _ISR_lock_ISR_disable( &queue_context.Lock_context );
+ _ISR_lock_ISR_disable( &queue_context.Lock_context.Lock_context );
_CORE_recursive_mutex_Surrender(
&the_mutex->Mutex,
_Thread_Executing,
diff --git a/cpukit/score/src/condition.c b/cpukit/score/src/condition.c
index b9e14adce8..36ef98949b 100644
--- a/cpukit/score/src/condition.c
+++ b/cpukit/score/src/condition.c
@@ -63,7 +63,7 @@ static Thread_Control *_Condition_Queue_acquire_critical(
_Thread_queue_Queue_acquire_critical(
&condition->Queue.Queue,
&executing->Potpourri_stats,
- &queue_context->Lock_context
+ &queue_context->Lock_context.Lock_context
);
return executing;
@@ -76,7 +76,7 @@ static void _Condition_Queue_release(
{
_Thread_queue_Queue_release(
&condition->Queue.Queue,
- &queue_context->Lock_context
+ &queue_context->Lock_context.Lock_context
);
}
@@ -91,7 +91,9 @@ static Per_CPU_Control *_Condition_Do_wait(
condition = _Condition_Get( _condition );
executing = _Condition_Queue_acquire_critical( condition, queue_context );
- cpu_self = _Thread_Dispatch_disable_critical( &queue_context->Lock_context );
+ cpu_self = _Thread_Dispatch_disable_critical(
+ &queue_context->Lock_context.Lock_context
+ );
_Thread_queue_Context_set_expected_level( queue_context, 2 );
_Thread_queue_Enqueue_critical(
@@ -114,7 +116,7 @@ void _Condition_Wait(
Per_CPU_Control *cpu_self;
_Thread_queue_Context_initialize( &queue_context );
- _ISR_lock_ISR_disable( &queue_context.Lock_context );
+ _ISR_lock_ISR_disable( &queue_context.Lock_context.Lock_context );
_Thread_queue_Context_set_no_timeout( &queue_context );
cpu_self = _Condition_Do_wait(
_condition,
@@ -139,15 +141,15 @@ int _Condition_Wait_timed(
Watchdog_Interval ticks;
_Thread_queue_Context_initialize( &queue_context );
- _ISR_lock_ISR_disable( &queue_context.Lock_context );
+ _ISR_lock_ISR_disable( &queue_context.Lock_context.Lock_context );
switch ( _TOD_Absolute_timeout_to_ticks( abstime, CLOCK_REALTIME, &ticks ) ) {
case TOD_ABSOLUTE_TIMEOUT_INVALID:
- _ISR_lock_ISR_enable( &queue_context.Lock_context );
+ _ISR_lock_ISR_enable( &queue_context.Lock_context.Lock_context );
return EINVAL;
case TOD_ABSOLUTE_TIMEOUT_IS_IN_PAST:
case TOD_ABSOLUTE_TIMEOUT_IS_NOW:
- _ISR_lock_ISR_enable( &queue_context.Lock_context );
+ _ISR_lock_ISR_enable( &queue_context.Lock_context.Lock_context );
return ETIMEDOUT;
default:
break;
@@ -175,7 +177,7 @@ void _Condition_Wait_recursive(
unsigned int nest_level;
_Thread_queue_Context_initialize( &queue_context );
- _ISR_lock_ISR_disable( &queue_context.Lock_context );
+ _ISR_lock_ISR_disable( &queue_context.Lock_context.Lock_context );
_Thread_queue_Context_set_no_timeout( &queue_context );
cpu_self = _Condition_Do_wait( _condition, &queue_context );
@@ -201,15 +203,15 @@ int _Condition_Wait_recursive_timed(
Watchdog_Interval ticks;
_Thread_queue_Context_initialize( &queue_context );
- _ISR_lock_ISR_disable( &queue_context.Lock_context );
+ _ISR_lock_ISR_disable( &queue_context.Lock_context.Lock_context );
switch ( _TOD_Absolute_timeout_to_ticks( abstime, CLOCK_REALTIME, &ticks ) ) {
case TOD_ABSOLUTE_TIMEOUT_INVALID:
- _ISR_lock_ISR_enable( &queue_context.Lock_context );
+ _ISR_lock_ISR_enable( &queue_context.Lock_context.Lock_context );
return EINVAL;
case TOD_ABSOLUTE_TIMEOUT_IS_IN_PAST:
case TOD_ABSOLUTE_TIMEOUT_IS_NOW:
- _ISR_lock_ISR_enable( &queue_context.Lock_context );
+ _ISR_lock_ISR_enable( &queue_context.Lock_context.Lock_context );
return ETIMEDOUT;
default:
break;
@@ -261,7 +263,7 @@ static void _Condition_Wake( struct _Condition_Control *_condition, int count )
condition = _Condition_Get( _condition );
_Thread_queue_Context_initialize( &context.Base );
- _ISR_lock_ISR_disable( &context.Base.Lock_context );
+ _ISR_lock_ISR_disable( &context.Base.Lock_context.Lock_context );
_Condition_Queue_acquire_critical( condition, &context.Base );
/*
diff --git a/cpukit/score/src/coremsgbroadcast.c b/cpukit/score/src/coremsgbroadcast.c
index f7579c2d98..ed92dbc620 100644
--- a/cpukit/score/src/coremsgbroadcast.c
+++ b/cpukit/score/src/coremsgbroadcast.c
@@ -33,7 +33,7 @@ Status_Control _CORE_message_queue_Broadcast(
uint32_t number_broadcasted;
if ( size > the_message_queue->maximum_message_size ) {
- _ISR_lock_ISR_enable( &queue_context->Lock_context );
+ _ISR_lock_ISR_enable( &queue_context->Lock_context.Lock_context );
return STATUS_MESSAGE_INVALID_SIZE;
}
diff --git a/cpukit/score/src/coremutexseize.c b/cpukit/score/src/coremutexseize.c
index cfefc50333..89b5c56a83 100644
--- a/cpukit/score/src/coremutexseize.c
+++ b/cpukit/score/src/coremutexseize.c
@@ -57,7 +57,7 @@ Status_Control _CORE_mutex_Seize_slow(
#if defined(RTEMS_SMP)
_Thread_queue_Context_set_expected_level( queue_context, 1 );
#else
- _ISR_lock_ISR_disable( &queue_context->Lock_context );
+ _ISR_lock_ISR_disable( &queue_context->Lock_context.Lock_context );
_CORE_mutex_Acquire_critical( the_mutex, queue_context );
_Thread_queue_Context_set_expected_level( queue_context, 2 );
#endif
diff --git a/cpukit/score/src/futex.c b/cpukit/score/src/futex.c
index 840101a703..1989445c73 100644
--- a/cpukit/score/src/futex.c
+++ b/cpukit/score/src/futex.c
@@ -55,12 +55,12 @@ static Thread_Control *_Futex_Queue_acquire(
{
Thread_Control *executing;
- _ISR_lock_ISR_disable( &queue_context->Lock_context );
+ _ISR_lock_ISR_disable( &queue_context->Lock_context.Lock_context );
executing = _Thread_Executing;
_Thread_queue_Queue_acquire_critical(
&futex->Queue.Queue,
&executing->Potpourri_stats,
- &queue_context->Lock_context
+ &queue_context->Lock_context.Lock_context
);
return executing;
@@ -73,7 +73,7 @@ static void _Futex_Queue_release(
{
_Thread_queue_Queue_release(
&futex->Queue.Queue,
- &queue_context->Lock_context
+ &queue_context->Lock_context.Lock_context
);
}
diff --git a/cpukit/score/src/mpci.c b/cpukit/score/src/mpci.c
index a562b29cbd..87d90a63f9 100644
--- a/cpukit/score/src/mpci.c
+++ b/cpukit/score/src/mpci.c
@@ -335,7 +335,7 @@ void _MPCI_Receive_server(
executing->receive_packet = NULL;
- _ISR_lock_ISR_disable( &queue_context.Lock_context );
+ _ISR_lock_ISR_disable( &queue_context.Lock_context.Lock_context );
_CORE_semaphore_Seize(
&_MPCI_Semaphore,
MPCI_SEMAPHORE_TQ_OPERATIONS,
@@ -375,7 +375,7 @@ void _MPCI_Announce ( void )
{
Thread_queue_Context queue_context;
- _ISR_lock_ISR_disable( &queue_context.Lock_context );
+ _ISR_lock_ISR_disable( &queue_context.Lock_context.Lock_context );
(void) _CORE_semaphore_Surrender(
&_MPCI_Semaphore,
MPCI_SEMAPHORE_TQ_OPERATIONS,
diff --git a/cpukit/score/src/mutex.c b/cpukit/score/src/mutex.c
index b1311c0c53..bfa36ff994 100644
--- a/cpukit/score/src/mutex.c
+++ b/cpukit/score/src/mutex.c
@@ -78,12 +78,12 @@ static Thread_Control *_Mutex_Queue_acquire(
{
Thread_Control *executing;
- _ISR_lock_ISR_disable( &queue_context->Lock_context );
+ _ISR_lock_ISR_disable( &queue_context->Lock_context.Lock_context );
executing = _Thread_Executing;
_Thread_queue_Queue_acquire_critical(
&mutex->Queue.Queue,
&executing->Potpourri_stats,
- &queue_context->Lock_context
+ &queue_context->Lock_context.Lock_context
);
return executing;
@@ -96,7 +96,7 @@ static void _Mutex_Queue_release(
{
_Thread_queue_Queue_release(
&mutex->Queue.Queue,
- &queue_context->Lock_context
+ &queue_context->Lock_context.Lock_context
);
}
diff --git a/cpukit/score/src/semaphore.c b/cpukit/score/src/semaphore.c
index 72cb1c796d..be7d685105 100644
--- a/cpukit/score/src/semaphore.c
+++ b/cpukit/score/src/semaphore.c
@@ -62,12 +62,12 @@ static Thread_Control *_Semaphore_Queue_acquire(
{
Thread_Control *executing;
- _ISR_lock_ISR_disable( &queue_context->Lock_context );
+ _ISR_lock_ISR_disable( &queue_context->Lock_context.Lock_context );
executing = _Thread_Executing;
_Thread_queue_Queue_acquire_critical(
&sem->Queue.Queue,
&executing->Potpourri_stats,
- &queue_context->Lock_context
+ &queue_context->Lock_context.Lock_context
);
return executing;
@@ -80,7 +80,7 @@ static void _Semaphore_Queue_release(
{
_Thread_queue_Queue_release(
&sem->Queue.Queue,
- &queue_context->Lock_context
+ &queue_context->Lock_context.Lock_context
);
}
diff --git a/cpukit/score/src/threadqenqueue.c b/cpukit/score/src/threadqenqueue.c
index 81b3948293..f16dff0005 100644
--- a/cpukit/score/src/threadqenqueue.c
+++ b/cpukit/score/src/threadqenqueue.c
@@ -184,10 +184,10 @@ static void _Thread_queue_Path_release( Thread_queue_Path *path )
link = THREAD_QUEUE_LINK_OF_PATH_NODE( node );
- if ( link->Queue_context.Wait.queue == NULL ) {
+ if ( link->Lock_context.Wait.queue == NULL ) {
_Thread_Wait_release_default_critical(
link->owner,
- &link->Queue_context.Lock_context
+ &link->Lock_context.Lock_context
);
node = _Chain_Previous( node );
@@ -199,14 +199,14 @@ static void _Thread_queue_Path_release( Thread_queue_Path *path )
while ( head != node ) {
/* The other links have an owner which waits on a thread queue */
link = THREAD_QUEUE_LINK_OF_PATH_NODE( node );
- _Assert( link->Queue_context.Wait.queue != NULL );
+ _Assert( link->Lock_context.Wait.queue != NULL );
_Thread_queue_Link_remove( link );
_Thread_Wait_release_queue_critical(
- link->Queue_context.Wait.queue,
- &link->Queue_context
+ link->Lock_context.Wait.queue,
+ &link->Lock_context
);
- _Thread_Wait_remove_request( link->owner, &link->Queue_context );
+ _Thread_Wait_remove_request( link->owner, &link->Lock_context );
node = _Chain_Previous( node );
#if defined(RTEMS_DEBUG)
@@ -253,7 +253,7 @@ static bool _Thread_queue_Path_acquire(
_RBTree_Initialize_node( &path->Start.Registry_node );
_Chain_Initialize_node( &path->Start.Path_node );
- _Thread_queue_Context_initialize( &path->Start.Queue_context );
+ _Chain_Initialize_node( &path->Start.Lock_context.Wait.Gate.Node );
link = &path->Start;
do {
@@ -262,37 +262,37 @@ static bool _Thread_queue_Path_acquire(
_Thread_Wait_acquire_default_critical(
owner,
- &link->Queue_context.Lock_context
+ &link->Lock_context.Lock_context
);
target = owner->Wait.queue;
- link->Queue_context.Wait.queue = target;
+ link->Lock_context.Wait.queue = target;
if ( target != NULL ) {
if ( _Thread_queue_Link_add( link, queue, target ) ) {
_Thread_queue_Gate_add(
&owner->Wait.Lock.Pending_requests,
- &link->Queue_context.Wait.Gate
+ &link->Lock_context.Wait.Gate
);
_Thread_Wait_release_default_critical(
owner,
- &link->Queue_context.Lock_context
+ &link->Lock_context.Lock_context
);
- _Thread_Wait_acquire_queue_critical( target, &link->Queue_context );
+ _Thread_Wait_acquire_queue_critical( target, &link->Lock_context );
- if ( link->Queue_context.Wait.queue == NULL ) {
+ if ( link->Lock_context.Wait.queue == NULL ) {
_Thread_queue_Link_remove( link );
- _Thread_Wait_release_queue_critical( target, &link->Queue_context );
+ _Thread_Wait_release_queue_critical( target, &link->Lock_context );
_Thread_Wait_acquire_default_critical(
owner,
- &link->Queue_context.Lock_context
+ &link->Lock_context.Lock_context
);
- _Thread_Wait_remove_request_locked( owner, &link->Queue_context );
+ _Thread_Wait_remove_request_locked( owner, &link->Lock_context );
_Assert( owner->Wait.queue == NULL );
return true;
}
} else {
- link->Queue_context.Wait.queue = NULL;
+ link->Lock_context.Wait.queue = NULL;
_Thread_queue_Path_release( path );
return false;
}
@@ -359,7 +359,7 @@ void _Thread_queue_Enqueue_critical(
if ( !_Thread_queue_Path_acquire( the_thread, queue, &path ) ) {
_Thread_Wait_restore_default( the_thread );
- _Thread_queue_Queue_release( queue, &queue_context->Lock_context );
+ _Thread_queue_Queue_release( queue, &queue_context->Lock_context.Lock_context );
_Thread_Wait_tranquilize( the_thread );
( *queue_context->deadlock_callout )( the_thread );
return;
@@ -371,8 +371,10 @@ void _Thread_queue_Enqueue_critical(
the_thread->Wait.return_code = STATUS_SUCCESSFUL;
_Thread_Wait_flags_set( the_thread, THREAD_QUEUE_INTEND_TO_BLOCK );
- cpu_self = _Thread_Dispatch_disable_critical( &queue_context->Lock_context );
- _Thread_queue_Queue_release( queue, &queue_context->Lock_context );
+ cpu_self = _Thread_Dispatch_disable_critical(
+ &queue_context->Lock_context.Lock_context
+ );
+ _Thread_queue_Queue_release( queue, &queue_context->Lock_context.Lock_context );
if (
cpu_self->thread_dispatch_disable_level
@@ -544,7 +546,7 @@ void _Thread_queue_Extract_critical(
unblock,
queue,
the_thread,
- &queue_context->Lock_context
+ &queue_context->Lock_context.Lock_context
);
}
@@ -561,7 +563,7 @@ void _Thread_queue_Extract( Thread_Control *the_thread )
if ( queue != NULL ) {
bool unblock;
- _Thread_Wait_remove_request( the_thread, &queue_context );
+ _Thread_Wait_remove_request( the_thread, &queue_context.Lock_context );
_Thread_queue_Context_set_MP_callout(
&queue_context,
_Thread_queue_MP_callout_do_nothing
@@ -576,7 +578,7 @@ void _Thread_queue_Extract( Thread_Control *the_thread )
unblock,
queue,
the_thread,
- &queue_context.Lock_context
+ &queue_context.Lock_context.Lock_context
);
} else {
_Thread_Wait_release( the_thread, &queue_context );
@@ -612,10 +614,10 @@ void _Thread_queue_Surrender(
unblock,
queue,
new_owner,
- &queue_context->Lock_context
+ &queue_context->Lock_context.Lock_context
);
} else {
- _Thread_queue_Queue_release( queue, &queue_context->Lock_context );
+ _Thread_queue_Queue_release( queue, &queue_context->Lock_context.Lock_context );
}
if ( !keep_priority ) {
diff --git a/cpukit/score/src/threadqflush.c b/cpukit/score/src/threadqflush.c
index df2859d51f..835858dd5a 100644
--- a/cpukit/score/src/threadqflush.c
+++ b/cpukit/score/src/threadqflush.c
@@ -109,9 +109,9 @@ size_t _Thread_queue_Flush_critical(
Per_CPU_Control *cpu_self;
cpu_self = _Thread_Dispatch_disable_critical(
- &queue_context->Lock_context
+ &queue_context->Lock_context.Lock_context
);
- _Thread_queue_Queue_release( queue, &queue_context->Lock_context );
+ _Thread_queue_Queue_release( queue, &queue_context->Lock_context.Lock_context );
do {
Thread_Control *the_thread;
@@ -126,7 +126,7 @@ size_t _Thread_queue_Flush_critical(
_Thread_Dispatch_enable( cpu_self );
} else {
- _Thread_queue_Queue_release( queue, &queue_context->Lock_context );
+ _Thread_queue_Queue_release( queue, &queue_context->Lock_context.Lock_context );
}
return flushed;
diff --git a/cpukit/score/src/threadrestart.c b/cpukit/score/src/threadrestart.c
index b7804a5af8..e963c732a8 100644
--- a/cpukit/score/src/threadrestart.c
+++ b/cpukit/score/src/threadrestart.c
@@ -536,7 +536,7 @@ void _Thread_Close( Thread_Control *the_thread, Thread_Control *executing )
_Thread_queue_Context_initialize( &queue_context );
_Thread_queue_Context_set_expected_level( &queue_context, 2 );
_Thread_queue_Context_set_no_timeout( &queue_context );
- _Thread_State_acquire( the_thread, &queue_context.Lock_context );
+ _Thread_State_acquire( the_thread, &queue_context.Lock_context.Lock_context );
_Thread_Join(
the_thread,
STATES_WAITING_FOR_JOIN,
diff --git a/testsuites/sptests/spintrcritical22/init.c b/testsuites/sptests/spintrcritical22/init.c
index 56d7837821..7412bdef7e 100644
--- a/testsuites/sptests/spintrcritical22/init.c
+++ b/testsuites/sptests/spintrcritical22/init.c
@@ -38,7 +38,7 @@ static Semaphore_Control *get_semaphore_control(rtems_id id)
sem = _Semaphore_Get(id, &queue_context);
rtems_test_assert(sem != NULL);
- _ISR_lock_ISR_enable(&queue_context.Lock_context);
+ _ISR_lock_ISR_enable(&queue_context.Lock_context.Lock_context);
return sem;
}
diff --git a/testsuites/tmtests/tm26/task1.c b/testsuites/tmtests/tm26/task1.c
index 38fb0ea0b1..0e52d3d95b 100644
--- a/testsuites/tmtests/tm26/task1.c
+++ b/testsuites/tmtests/tm26/task1.c
@@ -515,7 +515,7 @@ void complete_test( void )
benchmark_timer_initialize();
for ( index=1 ; index <= OPERATION_COUNT ; index++ ) {
(void) _Semaphore_Get( Semaphore_id, &queue_context );
- _ISR_lock_ISR_enable( &queue_context.Lock_context );
+ _ISR_lock_ISR_enable( &queue_context.Lock_context.Lock_context );
}
semaphore_get_time = benchmark_timer_read();