From 97312fcc6da163d76b69bf8ce68fd791cf014c2a Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 5 Apr 2016 14:36:30 +0200 Subject: score: Delete Thread_Wait_information::id This field was only by the monitor in non-multiprocessing configurations. Add new field Thread_Wait_information::remote_id in multiprocessing configurations and use it for the remote procedure call thread queue. Add _Thread_Wait_get_id() to obtain the object identifier for debug and system information tools. Ensure the object layout via static asserts. Add test cases to sptests/spthreadq01. --- cpukit/rtems/include/rtems/rtems/barrier.h | 4 ++-- cpukit/rtems/include/rtems/rtems/message.h | 4 ++-- cpukit/rtems/include/rtems/rtems/sem.h | 14 +++++++------- cpukit/rtems/src/barrierwait.c | 4 +++- cpukit/rtems/src/msgqreceive.c | 7 ++++++- cpukit/rtems/src/regiongetsegment.c | 1 - cpukit/rtems/src/semobtain.c | 12 +++++++++++- 7 files changed, 31 insertions(+), 15 deletions(-) (limited to 'cpukit/rtems') diff --git a/cpukit/rtems/include/rtems/rtems/barrier.h b/cpukit/rtems/include/rtems/rtems/barrier.h index 8c3b9d3022..2eea90fa41 100644 --- a/cpukit/rtems/include/rtems/rtems/barrier.h +++ b/cpukit/rtems/include/rtems/rtems/barrier.h @@ -55,10 +55,10 @@ extern "C" { typedef struct { /** This is used to manage a barrier as an object. */ Objects_Control Object; - /** This is used to specify the attributes of a barrier. */ - rtems_attribute attribute_set; /** This is used to implement the barrier. */ CORE_barrier_Control Barrier; + /** This is used to specify the attributes of a barrier. */ + rtems_attribute attribute_set; } Barrier_Control; /** diff --git a/cpukit/rtems/include/rtems/rtems/message.h b/cpukit/rtems/include/rtems/rtems/message.h index 0fad595277..8ae9e156a1 100644 --- a/cpukit/rtems/include/rtems/rtems/message.h +++ b/cpukit/rtems/include/rtems/rtems/message.h @@ -53,10 +53,10 @@ extern "C" { typedef struct { /** This field is the inherited object characteristics. */ Objects_Control Object; - /** This field is the attribute set as defined by the API. */ - rtems_attribute attribute_set; /** This field is the instance of the SuperCore Message Queue. */ CORE_message_queue_Control message_queue; + /** This field is the attribute set as defined by the API. */ + rtems_attribute attribute_set; } Message_queue_Control; /** diff --git a/cpukit/rtems/include/rtems/rtems/sem.h b/cpukit/rtems/include/rtems/rtems/sem.h index 6c71a9d433..b3950a2939 100644 --- a/cpukit/rtems/include/rtems/rtems/sem.h +++ b/cpukit/rtems/include/rtems/rtems/sem.h @@ -64,13 +64,6 @@ typedef struct { /** This field is the object management portion of a Semaphore instance. */ Objects_Control Object; - /** - * This is the Classic API attribute provided to the create directive. - * It is translated into behavioral attributes on the SuperCore Semaphore - * or Mutex instance. - */ - rtems_attribute attribute_set; - /** * This contains the memory associated with the SuperCore Semaphore or * Mutex instance that provides the primary functionality of each @@ -97,6 +90,13 @@ typedef struct { MRSP_Control mrsp; #endif } Core_control; + + /** + * This is the Classic API attribute provided to the create directive. + * It is translated into behavioral attributes on the SuperCore Semaphore + * or Mutex instance. + */ + rtems_attribute attribute_set; } Semaphore_Control; /** diff --git a/cpukit/rtems/src/barrierwait.c b/cpukit/rtems/src/barrierwait.c index fa7ab8edf5..3a3059363c 100644 --- a/cpukit/rtems/src/barrierwait.c +++ b/cpukit/rtems/src/barrierwait.c @@ -22,7 +22,9 @@ #include #include #include -#include +#include + +THREAD_WAIT_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 2b9a4e742b..3b4945e776 100644 --- a/cpukit/rtems/src/msgqreceive.c +++ b/cpukit/rtems/src/msgqreceive.c @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include #include @@ -30,6 +30,11 @@ #include #include +THREAD_WAIT_QUEUE_OBJECT_ASSERT( + Message_queue_Control, + message_queue.Wait_queue +); + rtems_status_code rtems_message_queue_receive( rtems_id id, void *buffer, diff --git a/cpukit/rtems/src/regiongetsegment.c b/cpukit/rtems/src/regiongetsegment.c index b040ebe2d3..0d1ac574dd 100644 --- a/cpukit/rtems/src/regiongetsegment.c +++ b/cpukit/rtems/src/regiongetsegment.c @@ -75,7 +75,6 @@ rtems_status_code rtems_region_get_segment( _Thread_Disable_dispatch(); _RTEMS_Unlock_allocator(); - executing->Wait.id = id; executing->Wait.count = size; executing->Wait.return_argument = segment; diff --git a/cpukit/rtems/src/semobtain.c b/cpukit/rtems/src/semobtain.c index bda39fa80e..0b43af43d8 100644 --- a/cpukit/rtems/src/semobtain.c +++ b/cpukit/rtems/src/semobtain.c @@ -27,10 +27,20 @@ #include #include #include -#include +#include #include +THREAD_WAIT_QUEUE_OBJECT_ASSERT( + Semaphore_Control, + Core_control.mutex.Wait_queue +); + +THREAD_WAIT_QUEUE_OBJECT_ASSERT( + Semaphore_Control, + Core_control.semaphore.Wait_queue +); + rtems_status_code rtems_semaphore_obtain( rtems_id id, rtems_option option_set, -- cgit v1.2.3