[PATCH v2 7/9] rtems: Remove Message_queue_Control::attribute_set

Sebastian Huber sebastian.huber at embedded-brains.de
Fri Sep 25 09:51:30 UTC 2020


Add Message_queue_Control::is_global if RTEMS_MULTIPROCESSING is defined.  This
reduces the Message_queue_Control size in standard RTEMS configurations.

Update #4007.
---
 cpukit/include/rtems/rtems/messagedata.h |  6 ++++--
 cpukit/libmisc/monitor/mon-queue.c       | 16 +++++++++++++++-
 cpukit/rtems/src/msgqcreate.c            | 12 ++++++------
 cpukit/rtems/src/msgqdelete.c            |  2 +-
 4 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/cpukit/include/rtems/rtems/messagedata.h b/cpukit/include/rtems/rtems/messagedata.h
index fa1f681473..8c72fba078 100644
--- a/cpukit/include/rtems/rtems/messagedata.h
+++ b/cpukit/include/rtems/rtems/messagedata.h
@@ -40,8 +40,10 @@ typedef struct {
   Objects_Control             Object;
   /** 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;
+#if defined(RTEMS_MULTIPROCESSING)
+  /** This field is true if the message queue is offered globally */
+  bool                        is_global;
+#endif
 }   Message_queue_Control;
 
 /**
diff --git a/cpukit/libmisc/monitor/mon-queue.c b/cpukit/libmisc/monitor/mon-queue.c
index 9430797c6c..aadfcd3989 100644
--- a/cpukit/libmisc/monitor/mon-queue.c
+++ b/cpukit/libmisc/monitor/mon-queue.c
@@ -16,7 +16,21 @@ rtems_monitor_queue_canonical(
 {
     const Message_queue_Control *rtems_queue = (const Message_queue_Control *) queue_void;
 
-    canonical_queue->attributes = rtems_queue->attribute_set;
+    canonical_queue->attributes = 0;
+
+    if (
+      rtems_queue->message_queue.operations
+        == &_Thread_queue_Operations_priority
+    ) {
+      canonical_queue->attributes |= RTEMS_PRIORITY;
+    }
+
+#if defined(RTEMS_MULTIPROCESSING)
+    if ( rtems_queue->is_global ) {
+      canonical_queue->attributes |= RTEMS_GLOBAL;
+    }
+#endif
+
     canonical_queue->maximum_message_size = rtems_queue->message_queue.maximum_message_size;
     canonical_queue->maximum_pending_messages = rtems_queue->message_queue.maximum_pending_messages;
     canonical_queue->number_of_pending_messages = rtems_queue->message_queue.number_of_pending_messages;
diff --git a/cpukit/rtems/src/msgqcreate.c b/cpukit/rtems/src/msgqcreate.c
index 79b198199e..20787f00a6 100644
--- a/cpukit/rtems/src/msgqcreate.c
+++ b/cpukit/rtems/src/msgqcreate.c
@@ -53,11 +53,11 @@ rtems_status_code rtems_message_queue_create(
     return RTEMS_INVALID_ADDRESS;
 
 #if defined(RTEMS_MULTIPROCESSING)
-  if ( !_System_state_Is_multiprocessing ) {
-    attribute_set = _Attributes_Clear( attribute_set, RTEMS_GLOBAL );
+  if ( _System_state_Is_multiprocessing ) {
+    is_global = _Attributes_Is_global( attribute_set );
+  } else {
+    is_global = false;
   }
-
-  is_global = _Attributes_Is_global( attribute_set );
 #endif
 
   if ( count == 0 )
@@ -99,9 +99,9 @@ rtems_status_code rtems_message_queue_create(
     _Objects_Allocator_unlock();
     return RTEMS_TOO_MANY;
   }
-#endif
 
-  the_message_queue->attribute_set = attribute_set;
+  the_message_queue->is_global = is_global;
+#endif
 
   if (_Attributes_Is_priority( attribute_set ) )
     discipline = CORE_MESSAGE_QUEUE_DISCIPLINES_PRIORITY;
diff --git a/cpukit/rtems/src/msgqdelete.c b/cpukit/rtems/src/msgqdelete.c
index 791f96e676..e1d57addc9 100644
--- a/cpukit/rtems/src/msgqdelete.c
+++ b/cpukit/rtems/src/msgqdelete.c
@@ -60,7 +60,7 @@ rtems_status_code rtems_message_queue_delete(
   );
 
 #if defined(RTEMS_MULTIPROCESSING)
-  if ( _Attributes_Is_global( the_message_queue->attribute_set ) ) {
+  if ( the_message_queue->is_global ) {
     _Objects_MP_Close(
       &_Message_queue_Information,
       the_message_queue->Object.id
-- 
2.26.2



More information about the devel mailing list