From 8866e6222f5cbfa285b6411fb74154289b024c6b Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 23 May 2016 06:26:58 +0200 Subject: score: Move thread queue object support --- cpukit/posix/src/condwaitsupp.c | 7 ++----- cpukit/posix/src/mqueuerecvsupp.c | 3 +-- cpukit/posix/src/mutexlocksupp.c | 2 +- cpukit/posix/src/pbarrierwait.c | 3 +-- cpukit/posix/src/prwlockwrlock.c | 3 +-- cpukit/posix/src/semaphorewaitsupp.c | 6 +----- cpukit/rtems/src/barrierwait.c | 3 +-- cpukit/rtems/src/msgqreceive.c | 6 +----- cpukit/rtems/src/semobtain.c | 5 ++--- cpukit/score/include/rtems/score/threadimpl.h | 20 ------------------- cpukit/score/include/rtems/score/threadqimpl.h | 27 ++++++++++++++++++++++++++ cpukit/score/src/threadwaitgetid.c | 8 ++------ 12 files changed, 40 insertions(+), 53 deletions(-) diff --git a/cpukit/posix/src/condwaitsupp.c b/cpukit/posix/src/condwaitsupp.c index b578a5f76f..4f0ac3cab8 100644 --- a/cpukit/posix/src/condwaitsupp.c +++ b/cpukit/posix/src/condwaitsupp.c @@ -22,12 +22,9 @@ #include #include #include -#include +#include -THREAD_WAIT_QUEUE_OBJECT_ASSERT( - POSIX_Condition_variables_Control, - Wait_queue -); +THREAD_QUEUE_OBJECT_ASSERT( POSIX_Condition_variables_Control, Wait_queue ); int _POSIX_Condition_variables_Wait_support( pthread_cond_t *cond, diff --git a/cpukit/posix/src/mqueuerecvsupp.c b/cpukit/posix/src/mqueuerecvsupp.c index 1d7d527d49..b5a790a2bd 100644 --- a/cpukit/posix/src/mqueuerecvsupp.c +++ b/cpukit/posix/src/mqueuerecvsupp.c @@ -19,11 +19,10 @@ #endif #include -#include #include -THREAD_WAIT_QUEUE_OBJECT_ASSERT( +THREAD_QUEUE_OBJECT_ASSERT( POSIX_Message_queue_Control, Message_queue.Wait_queue ); diff --git a/cpukit/posix/src/mutexlocksupp.c b/cpukit/posix/src/mutexlocksupp.c index 5c708579f6..0c70cf06e2 100644 --- a/cpukit/posix/src/mutexlocksupp.c +++ b/cpukit/posix/src/mutexlocksupp.c @@ -20,7 +20,7 @@ #include -THREAD_WAIT_QUEUE_OBJECT_ASSERT( POSIX_Mutex_Control, Mutex.Wait_queue ); +THREAD_QUEUE_OBJECT_ASSERT( POSIX_Mutex_Control, Mutex.Wait_queue ); int _POSIX_Mutex_Lock_support( pthread_mutex_t *mutex, diff --git a/cpukit/posix/src/pbarrierwait.c b/cpukit/posix/src/pbarrierwait.c index 9200dc0eee..150ece7fff 100644 --- a/cpukit/posix/src/pbarrierwait.c +++ b/cpukit/posix/src/pbarrierwait.c @@ -19,9 +19,8 @@ #endif #include -#include -THREAD_WAIT_QUEUE_OBJECT_ASSERT( POSIX_Barrier_Control, Barrier.Wait_queue ); +THREAD_QUEUE_OBJECT_ASSERT( POSIX_Barrier_Control, Barrier.Wait_queue ); /** * This directive allows a thread to wait at a barrier. diff --git a/cpukit/posix/src/prwlockwrlock.c b/cpukit/posix/src/prwlockwrlock.c index 635f376e7d..568316363a 100644 --- a/cpukit/posix/src/prwlockwrlock.c +++ b/cpukit/posix/src/prwlockwrlock.c @@ -24,9 +24,8 @@ #include #include -#include -THREAD_WAIT_QUEUE_OBJECT_ASSERT( POSIX_RWLock_Control, RWLock.Wait_queue ); +THREAD_QUEUE_OBJECT_ASSERT( POSIX_RWLock_Control, RWLock.Wait_queue ); int pthread_rwlock_wrlock( pthread_rwlock_t *rwlock diff --git a/cpukit/posix/src/semaphorewaitsupp.c b/cpukit/posix/src/semaphorewaitsupp.c index 02a2ae19e5..f08efa8e22 100644 --- a/cpukit/posix/src/semaphorewaitsupp.c +++ b/cpukit/posix/src/semaphorewaitsupp.c @@ -21,12 +21,8 @@ #include #include -#include -THREAD_WAIT_QUEUE_OBJECT_ASSERT( - POSIX_Semaphore_Control, - Semaphore.Wait_queue -); +THREAD_QUEUE_OBJECT_ASSERT( POSIX_Semaphore_Control, Semaphore.Wait_queue ); int _POSIX_Semaphore_Wait_support( sem_t *sem, diff --git a/cpukit/rtems/src/barrierwait.c b/cpukit/rtems/src/barrierwait.c index b5f23d7bb5..d9d386956e 100644 --- a/cpukit/rtems/src/barrierwait.c +++ b/cpukit/rtems/src/barrierwait.c @@ -19,9 +19,8 @@ #endif #include -#include -THREAD_WAIT_QUEUE_OBJECT_ASSERT( Barrier_Control, Barrier.Wait_queue ); +THREAD_QUEUE_OBJECT_ASSERT( Barrier_Control, Barrier.Wait_queue ); rtems_status_code rtems_barrier_wait( rtems_id id, diff --git a/cpukit/rtems/src/msgqreceive.c b/cpukit/rtems/src/msgqreceive.c index 578b280fd2..dada8dff81 100644 --- a/cpukit/rtems/src/msgqreceive.c +++ b/cpukit/rtems/src/msgqreceive.c @@ -19,13 +19,9 @@ #endif #include -#include #include -THREAD_WAIT_QUEUE_OBJECT_ASSERT( - Message_queue_Control, - message_queue.Wait_queue -); +THREAD_QUEUE_OBJECT_ASSERT( Message_queue_Control, message_queue.Wait_queue ); rtems_status_code rtems_message_queue_receive( rtems_id id, diff --git a/cpukit/rtems/src/semobtain.c b/cpukit/rtems/src/semobtain.c index 43408156d4..3cf780aa28 100644 --- a/cpukit/rtems/src/semobtain.c +++ b/cpukit/rtems/src/semobtain.c @@ -19,16 +19,15 @@ #endif #include -#include #include #include -THREAD_WAIT_QUEUE_OBJECT_ASSERT( +THREAD_QUEUE_OBJECT_ASSERT( Semaphore_Control, Core_control.mutex.Wait_queue ); -THREAD_WAIT_QUEUE_OBJECT_ASSERT( +THREAD_QUEUE_OBJECT_ASSERT( Semaphore_Control, Core_control.semaphore.Wait_queue ); diff --git a/cpukit/score/include/rtems/score/threadimpl.h b/cpukit/score/include/rtems/score/threadimpl.h index 0802730832..cef2786ae4 100644 --- a/cpukit/score/include/rtems/score/threadimpl.h +++ b/cpukit/score/include/rtems/score/threadimpl.h @@ -1463,26 +1463,6 @@ RTEMS_INLINE_ROUTINE void _Thread_Wait_set_timeout_code( the_thread->Wait.timeout_code = timeout_code; } -/** - * @brief Helper structure to ensure that all objects containing a thread queue - * have the right layout. - * - * @see _Thread_Wait_get_id() and THREAD_WAIT_QUEUE_OBJECT_ASSERT(). - */ -typedef struct { - Objects_Control Object; - Thread_queue_Control Wait_queue; -} Thread_Wait_queue_object; - -#define THREAD_WAIT_QUEUE_OBJECT_ASSERT( object_type, wait_queue_member ) \ - RTEMS_STATIC_ASSERT( \ - offsetof( object_type, wait_queue_member ) \ - == offsetof( Thread_Wait_queue_object, Wait_queue ) \ - && ( &( ( (object_type *) 0 )->wait_queue_member ) \ - == ( &( (Thread_Wait_queue_object *) 0 )->Wait_queue ) ), \ - object_type \ - ) - /** * @brief Returns the object identifier of the object containing the current * thread wait queue. diff --git a/cpukit/score/include/rtems/score/threadqimpl.h b/cpukit/score/include/rtems/score/threadqimpl.h index 0c4e979a5e..f24e48c29f 100644 --- a/cpukit/score/include/rtems/score/threadqimpl.h +++ b/cpukit/score/include/rtems/score/threadqimpl.h @@ -795,6 +795,33 @@ void _Thread_queue_Unblock_proxy( ); #endif +/** + * @brief Helper structure to ensure that all objects containing a thread queue + * have the right layout. + * + * @see _Thread_Wait_get_id() and THREAD_QUEUE_OBJECT_ASSERT(). + */ +typedef struct { + Objects_Control Object; + Thread_queue_Control Wait_queue; +} Thread_queue_Object; + +#define THREAD_QUEUE_OBJECT_ASSERT( object_type, wait_queue_member ) \ + RTEMS_STATIC_ASSERT( \ + offsetof( object_type, wait_queue_member ) \ + == offsetof( Thread_queue_Object, Wait_queue ) \ + && ( &( ( (object_type *) 0 )->wait_queue_member ) \ + == ( &( (Thread_queue_Object *) 0 )->Wait_queue ) ), \ + object_type \ + ) + +#define THREAD_QUEUE_QUEUE_TO_OBJECT( queue ) \ + RTEMS_CONTAINER_OF( \ + queue, \ + Thread_queue_Object, \ + Wait_queue.Queue \ + ) + extern const Thread_queue_Operations _Thread_queue_Operations_default; extern const Thread_queue_Operations _Thread_queue_Operations_FIFO; diff --git a/cpukit/score/src/threadwaitgetid.c b/cpukit/score/src/threadwaitgetid.c index 0851e8f18d..6c12fd6d3e 100644 --- a/cpukit/score/src/threadwaitgetid.c +++ b/cpukit/score/src/threadwaitgetid.c @@ -39,13 +39,9 @@ Objects_Id _Thread_Wait_get_id( const Thread_Control *the_thread ) #endif if ( ( current_state & THREAD_WAIT_QUEUE_OBJECT_STATES ) != 0 ) { - const Thread_Wait_queue_object *queue_object; + const Thread_queue_Object *queue_object; - queue_object = RTEMS_CONTAINER_OF( - the_thread->Wait.queue, - Thread_Wait_queue_object, - Wait_queue.Queue - ); + queue_object = THREAD_QUEUE_QUEUE_TO_OBJECT( the_thread->Wait.queue ); return queue_object->Object.id; } -- cgit v1.2.3