[PATCH 07/14] posix: Provide shared memory objects by default
Sebastian Huber
sebastian.huber at embedded-brains.de
Mon Oct 29 09:03:16 UTC 2018
Update #2514.
---
cpukit/Makefile.am | 15 ++++---
cpukit/include/rtems/confdefs.h | 63 ++++++++++-----------------
cpukit/posix/src/shmops.c | 40 +++++++++++++++++
cpukit/rtems/src/rtemsobjectgetapiclassname.c | 2 +-
4 files changed, 72 insertions(+), 48 deletions(-)
create mode 100644 cpukit/posix/src/shmops.c
diff --git a/cpukit/Makefile.am b/cpukit/Makefile.am
index 3d9bead51a..6c2574b264 100644
--- a/cpukit/Makefile.am
+++ b/cpukit/Makefile.am
@@ -508,11 +508,13 @@ librtemscpu_a_SOURCES += posix/src/keysetspecific.c
librtemscpu_a_SOURCES += posix/src/lio_listio.c
librtemscpu_a_SOURCES += posix/src/mlockall.c
librtemscpu_a_SOURCES += posix/src/mlock.c
+librtemscpu_a_SOURCES += posix/src/mmap.c
librtemscpu_a_SOURCES += posix/src/mprotect.c
librtemscpu_a_SOURCES += posix/src/mqueueconfig.c
librtemscpu_a_SOURCES += posix/src/msync.c
librtemscpu_a_SOURCES += posix/src/munlockall.c
librtemscpu_a_SOURCES += posix/src/munlock.c
+librtemscpu_a_SOURCES += posix/src/munmap.c
librtemscpu_a_SOURCES += posix/src/mutexattrdestroy.c
librtemscpu_a_SOURCES += posix/src/mutexattrgetprioceiling.c
librtemscpu_a_SOURCES += posix/src/mutexattrgetprotocol.c
@@ -620,7 +622,13 @@ librtemscpu_a_SOURCES += posix/src/semunlink.c
librtemscpu_a_SOURCES += posix/src/semwait.c
librtemscpu_a_SOURCES += posix/src/setcancelstate.c
librtemscpu_a_SOURCES += posix/src/setcanceltype.c
+librtemscpu_a_SOURCES += posix/src/shm.c
librtemscpu_a_SOURCES += posix/src/shmconfig.c
+librtemscpu_a_SOURCES += posix/src/shmheap.c
+librtemscpu_a_SOURCES += posix/src/shmopen.c
+librtemscpu_a_SOURCES += posix/src/shmops.c
+librtemscpu_a_SOURCES += posix/src/shmunlink.c
+librtemscpu_a_SOURCES += posix/src/shmwkspace.c
librtemscpu_a_SOURCES += posix/src/sigaddset.c
librtemscpu_a_SOURCES += posix/src/sigdelset.c
librtemscpu_a_SOURCES += posix/src/sigemptyset.c
@@ -1039,7 +1047,6 @@ librtemscpu_a_SOURCES += posix/src/getitimer.c
librtemscpu_a_SOURCES += posix/src/kill.c
librtemscpu_a_SOURCES += posix/src/killinfo.c
librtemscpu_a_SOURCES += posix/src/kill_r.c
-librtemscpu_a_SOURCES += posix/src/mmap.c
librtemscpu_a_SOURCES += posix/src/mqueue.c
librtemscpu_a_SOURCES += posix/src/mqueueclose.c
librtemscpu_a_SOURCES += posix/src/mqueuedeletesupp.c
@@ -1054,7 +1061,6 @@ librtemscpu_a_SOURCES += posix/src/mqueuesetattr.c
librtemscpu_a_SOURCES += posix/src/mqueuetimedreceive.c
librtemscpu_a_SOURCES += posix/src/mqueuetimedsend.c
librtemscpu_a_SOURCES += posix/src/mqueueunlink.c
-librtemscpu_a_SOURCES += posix/src/munmap.c
librtemscpu_a_SOURCES += posix/src/pause.c
librtemscpu_a_SOURCES += posix/src/psignal.c
librtemscpu_a_SOURCES += posix/src/psignalclearprocesssignals.c
@@ -1074,11 +1080,6 @@ librtemscpu_a_SOURCES += posix/src/pthreadsetschedprio.c
librtemscpu_a_SOURCES += posix/src/pthreadsigmask.c
librtemscpu_a_SOURCES += posix/src/ptimer.c
librtemscpu_a_SOURCES += posix/src/setitimer.c
-librtemscpu_a_SOURCES += posix/src/shm.c
-librtemscpu_a_SOURCES += posix/src/shmheap.c
-librtemscpu_a_SOURCES += posix/src/shmopen.c
-librtemscpu_a_SOURCES += posix/src/shmunlink.c
-librtemscpu_a_SOURCES += posix/src/shmwkspace.c
librtemscpu_a_SOURCES += posix/src/sigaction.c
librtemscpu_a_SOURCES += posix/src/signal_2.c
librtemscpu_a_SOURCES += posix/src/sigpending.c
diff --git a/cpukit/include/rtems/confdefs.h b/cpukit/include/rtems/confdefs.h
index a38cdec8c0..78a73c8c4a 100644
--- a/cpukit/include/rtems/confdefs.h
+++ b/cpukit/include/rtems/confdefs.h
@@ -34,6 +34,7 @@
#include <rtems/score/wkspace.h>
#include <rtems/posix/key.h>
#include <rtems/posix/semaphore.h>
+#include <rtems/posix/shm.h>
#include <limits.h>
@@ -1940,6 +1941,10 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES \
rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
#endif
+ #if !defined(CONFIGURE_MAXIMUM_POSIX_SHMS)
+ #define CONFIGURE_MAXIMUM_POSIX_SHMS \
+ rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
+ #endif
#ifdef RTEMS_POSIX_API
#if !defined(CONFIGURE_MAXIMUM_POSIX_THREADS)
@@ -1960,10 +1965,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES \
rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
#endif
- #if !defined(CONFIGURE_MAXIMUM_POSIX_SHMS)
- #define CONFIGURE_MAXIMUM_POSIX_SHMS \
- rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
- #endif
#endif /* RTEMS_POSIX_API */
#endif /* CONFIGURE_UNLIMITED_OBJECTS */
@@ -2323,6 +2324,20 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
_Configure_POSIX_Named_Object_RAM( \
_semaphores, sizeof(POSIX_Semaphore_Control) )
+/**
+ * Configure the maximum number of POSIX shared memory objects.
+ */
+#ifndef CONFIGURE_MAXIMUM_POSIX_SHMS
+ #define CONFIGURE_MAXIMUM_POSIX_SHMS 0
+#endif
+
+/*
+ * This macro is calculated to specify the memory required for
+ * POSIX API shared memory.
+ */
+#define _CONFIGURE_MEMORY_FOR_POSIX_SHMS(_shms) \
+ _Configure_POSIX_Named_Object_RAM(_shms, sizeof(POSIX_Shm_Control) )
+
/*
* The rest of the POSIX threads API features are only available when
* POSIX is enabled.
@@ -2334,7 +2349,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
#include <rtems/posix/mqueue.h>
#include <rtems/posix/psignal.h>
#include <rtems/posix/pthread.h>
- #include <rtems/posix/shm.h>
#include <rtems/posix/threadsup.h>
#include <rtems/posix/timer.h>
@@ -2393,32 +2407,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
_Configure_POSIX_Named_Object_RAM( \
_message_queues, sizeof(POSIX_Message_queue_Control) )
- /**
- * Configure the maximum number of POSIX shared memory objects.
- */
- #if !defined(CONFIGURE_MAXIMUM_POSIX_SHMS)
- #define CONFIGURE_MAXIMUM_POSIX_SHMS 0
- #else
- #ifdef CONFIGURE_INIT
- #if !defined(CONFIGURE_HAS_OWN_POSIX_SHM_OBJECT_OPERATIONS)
- const POSIX_Shm_Object_operations _POSIX_Shm_Object_operations = {
- _POSIX_Shm_Object_create_from_workspace,
- _POSIX_Shm_Object_resize_from_workspace,
- _POSIX_Shm_Object_delete_from_workspace,
- _POSIX_Shm_Object_read_from_workspace,
- _POSIX_Shm_Object_mmap_from_workspace
- };
- #endif
- #endif
- #endif
-
- /*
- * This macro is calculated to specify the memory required for
- * POSIX API shared memory.
- */
- #define _CONFIGURE_MEMORY_FOR_POSIX_SHMS(_shms) \
- _Configure_POSIX_Named_Object_RAM(_shms, sizeof(POSIX_Shm_Control) )
-
#ifdef CONFIGURE_POSIX_INIT_THREAD_TABLE
#ifndef CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
#ifndef CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
@@ -2559,8 +2547,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS) + \
_CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES( \
CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES) + \
- _CONFIGURE_MEMORY_FOR_POSIX_SHMS( \
- CONFIGURE_MAXIMUM_POSIX_SHMS) + \
_CONFIGURE_MEMORY_FOR_POSIX_TIMERS(CONFIGURE_MAXIMUM_POSIX_TIMERS))
#else
/*
@@ -2721,6 +2707,8 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS ) + \
_CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES( \
CONFIGURE_MAXIMUM_POSIX_SEMAPHORES) + \
+ _CONFIGURE_MEMORY_FOR_POSIX_SHMS( \
+ CONFIGURE_MAXIMUM_POSIX_SHMS) + \
_CONFIGURE_MEMORY_FOR_POSIX + \
_CONFIGURE_MEMORY_FOR_STATIC_EXTENSIONS + \
_CONFIGURE_MEMORY_FOR_MP + \
@@ -3226,9 +3214,7 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
uint32_t POSIX_MESSAGE_QUEUES;
#endif
uint32_t POSIX_SEMAPHORES;
-#ifdef RTEMS_POSIX_API
uint32_t POSIX_SHMS;
-#endif
/* Stack space sizes */
uint32_t IDLE_TASKS_STACK;
@@ -3268,18 +3254,16 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
_CONFIGURE_MEMORY_FOR_POSIX_KEYS( _CONFIGURE_POSIX_KEYS, \
CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS ),
-#ifdef RTEMS_POSIX_API
/* POSIX API Pieces */
+#ifdef RTEMS_POSIX_API
+ _CONFIGURE_MEMORY_FOR_POSIX_TIMERS( CONFIGURE_MAXIMUM_POSIX_TIMERS ),
_CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS(
CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS ),
_CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES(
CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES ),
#endif
_CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES( CONFIGURE_MAXIMUM_POSIX_SEMAPHORES ),
-#ifdef RTEMS_POSIX_API
_CONFIGURE_MEMORY_FOR_POSIX_SHMS( CONFIGURE_MAXIMUM_POSIX_SHMS ),
- _CONFIGURE_MEMORY_FOR_POSIX_TIMERS( CONFIGURE_MAXIMUM_POSIX_TIMERS ),
-#endif
/* Stack space sizes */
_CONFIGURE_IDLE_TASKS_STACK,
@@ -3344,7 +3328,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
(CONFIGURE_MAXIMUM_POSIX_TIMERS != 0) || \
(CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS != 0) || \
(CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES != 0) || \
- (CONFIGURE_MAXIMUM_POSIX_SHMS != 0) || \
defined(CONFIGURE_POSIX_INIT_THREAD_TABLE))
#error "CONFIGURATION ERROR: POSIX API support not configured!!"
#endif
diff --git a/cpukit/posix/src/shmops.c b/cpukit/posix/src/shmops.c
new file mode 100644
index 0000000000..0f28acac0d
--- /dev/null
+++ b/cpukit/posix/src/shmops.c
@@ -0,0 +1,40 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2018, embedded brains GmbH <rtems at embedded-brains.de>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/posix/shm.h>
+
+const POSIX_Shm_Object_operations _POSIX_Shm_Object_operations = {
+ _POSIX_Shm_Object_create_from_workspace,
+ _POSIX_Shm_Object_resize_from_workspace,
+ _POSIX_Shm_Object_delete_from_workspace,
+ _POSIX_Shm_Object_read_from_workspace,
+ _POSIX_Shm_Object_mmap_from_workspace
+};
diff --git a/cpukit/rtems/src/rtemsobjectgetapiclassname.c b/cpukit/rtems/src/rtemsobjectgetapiclassname.c
index 6b90897389..61ca90fe7e 100644
--- a/cpukit/rtems/src/rtemsobjectgetapiclassname.c
+++ b/cpukit/rtems/src/rtemsobjectgetapiclassname.c
@@ -52,8 +52,8 @@ static const rtems_assoc_t rtems_object_api_posix_assoc[] = {
{ "Semaphore", OBJECTS_POSIX_SEMAPHORES, 0},
#ifdef RTEMS_POSIX_API
{ "Timer", OBJECTS_POSIX_TIMERS, 0},
- { "Shared Memory", OBJECTS_POSIX_SHMS, 0},
#endif
+ { "Shared Memory", OBJECTS_POSIX_SHMS, 0},
{ NULL, 0, 0}
};
--
2.16.4
More information about the devel
mailing list