[PATCH 1/2] libmm score and stubs

Rempel, Cynthia cynt6007 at vandals.uidaho.edu
Wed Jul 24 15:02:55 UTC 2013


Hi Hesham,

Thanks for doing the stubs :)
Could you pull all the implementation specific parts of mm.h and mm.inl into a header called mmimpl.h ?
It would then match the header-style score is heading towards...
If the no_memorymanagement.c is for devices without mm support, could you have the functions print out a "stub warning/error" message? That way the user knows not to rely on memory management...

Thanks!
Cindy

________________________________________
From: rtems-devel-bounces at rtems.org [rtems-devel-bounces at rtems.org] on behalf of Hesham AL-Matary [heshamelmatary at gmail.com]
Sent: Tuesday, July 23, 2013 2:24 PM
To: rtems-devel at rtems.org
Subject: [PATCH 1/2] libmm score and stubs

---
 c/src/lib/libcpu/shared/include/mm.h              | 23 +++++++
 c/src/lib/libcpu/shared/src/no_memorymanagement.c | 17 +++++
 cpukit/score/Makefile.am                          |  2 +
 cpukit/score/include/rtems/score/mm.h             | 55 +++++++++++++++
 cpukit/score/inline/rtems/score/mm.inl            | 82 +++++++++++++++++++++++
 cpukit/score/preinstall.am                        |  8 +++
 testsuites/libtests/Makefile.am                   |  2 +-
 testsuites/libtests/configure.ac                  |  1 +
 testsuites/libtests/mmtest1/Makefile.am           | 18 +++++
 testsuites/libtests/mmtest1/init.c                | 41 ++++++++++++
 testsuites/libtests/mmtest1/mmtest1.doc           |  1 +
 testsuites/libtests/mmtest1/mmtests.scn           |  7 ++
 testsuites/libtests/mmtest1/system.h              | 33 +++++++++
 13 files changed, 289 insertions(+), 1 deletion(-)
 create mode 100644 c/src/lib/libcpu/shared/include/mm.h
 create mode 100644 c/src/lib/libcpu/shared/src/no_memorymanagement.c
 create mode 100644 cpukit/score/include/rtems/score/mm.h
 create mode 100644 cpukit/score/inline/rtems/score/mm.inl
 create mode 100644 testsuites/libtests/mmtest1/Makefile.am
 create mode 100644 testsuites/libtests/mmtest1/init.c
 create mode 100644 testsuites/libtests/mmtest1/mmtest1.doc
 create mode 100644 testsuites/libtests/mmtest1/mmtests.scn
 create mode 100644 testsuites/libtests/mmtest1/system.h

diff --git a/c/src/lib/libcpu/shared/include/mm.h b/c/src/lib/libcpu/shared/include/mm.h
new file mode 100644
index 0000000..02903f1
--- /dev/null
+++ b/c/src/lib/libcpu/shared/include/mm.h
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2013 Gedare Bloom.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifndef __LIBCPU_MM_H
+#define __LIBCPU_MM_H
+
+#include <rtems/score/mm.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void _CPU_Memory_management_Initialize(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/c/src/lib/libcpu/shared/src/no_memorymanagement.c b/c/src/lib/libcpu/shared/src/no_memorymanagement.c
new file mode 100644
index 0000000..f5380a0
--- /dev/null
+++ b/c/src/lib/libcpu/shared/src/no_memorymanagement.c
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2013 Hesham AL-Matary
+ * Copyright (c) 2013 Gedare Bloom.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#include <rtems.h>
+#include <libcpu/mm.h>
+
+void _CPU_Memory_management_Initialize( void ) { }
+
+void _CPU_Memory_management_Install_entry( uintptr_t base, size_t size, uint32_t flags ) { }
+
+void _CPU_Memory_management_Uninstall_entry( uintptr_t base, size_t size ) { }
diff --git a/cpukit/score/Makefile.am b/cpukit/score/Makefile.am
index 3f6e686..58a865b 100644
--- a/cpukit/score/Makefile.am
+++ b/cpukit/score/Makefile.am
@@ -30,6 +30,7 @@ include_rtems_score_HEADERS += include/rtems/score/protectedheap.h
 include_rtems_score_HEADERS += include/rtems/score/interr.h
 include_rtems_score_HEADERS += include/rtems/score/isr.h
 include_rtems_score_HEADERS += include/rtems/score/isrlevel.h
+include_rtems_score_HEADERS += include/rtems/score/mm.h
 include_rtems_score_HEADERS += include/rtems/score/object.h
 include_rtems_score_HEADERS += include/rtems/score/percpu.h
 include_rtems_score_HEADERS += include/rtems/score/priority.h
@@ -90,6 +91,7 @@ include_rtems_score_HEADERS += inline/rtems/score/coremutex.inl
 include_rtems_score_HEADERS += inline/rtems/score/coresem.inl
 include_rtems_score_HEADERS += inline/rtems/score/heap.inl
 include_rtems_score_HEADERS += inline/rtems/score/isr.inl
+include_rtems_score_HEADERS += inline/rtems/score/mm.inl
 include_rtems_score_HEADERS += inline/rtems/score/object.inl
 include_rtems_score_HEADERS += inline/rtems/score/priority.inl
 include_rtems_score_HEADERS += inline/rtems/score/prioritybitmap.inl
diff --git a/cpukit/score/include/rtems/score/mm.h b/cpukit/score/include/rtems/score/mm.h
new file mode 100644
index 0000000..c1f950d
--- /dev/null
+++ b/cpukit/score/include/rtems/score/mm.h
@@ -0,0 +1,55 @@
+/**
+ * @file
+ *
+ * @brief Manages use of MPU/MMU units to provide memory management.
+ */
+
+/*
+ * Copyright (c) 2013 Hesham Al-Matary.
+ * Copyright (c) 2013 Gedare Bloom.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifndef _RTEMS_SCORE_MM_H
+#define _RTEMS_SCORE_MM_H
+
+/* @defgroup SuperCoreMM Memory Management Support
+ *
+ * @ingroup Score
+ */
+/**@{*/
+
+#include <inttypes.h>
+
+#ifdef RTEMS_SMP
+#include <rtems/score/smplock.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/**
+ * @brief _Memory_management_Region Flags defs
+ */
+#define RTEMS_MM_REGION_PROTECTION_READ_ONLY   0x1
+#define RTEMS_MM_REGION_PROTECTION_WRITE  0x2
+//#define RTEMS_MM_REGION_PROTECTION_EXEC   0x4
+
+#ifdef RTEMS_SMP
+SMP_lock_Control mm_lock;
+#endif
+
+#ifndef __RTEMS_APPLICATION__
+#include <rtems/score/mm.inl>
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+/**@}*/
+
+#endif
diff --git a/cpukit/score/inline/rtems/score/mm.inl b/cpukit/score/inline/rtems/score/mm.inl
new file mode 100644
index 0000000..765c147
--- /dev/null
+++ b/cpukit/score/inline/rtems/score/mm.inl
@@ -0,0 +1,82 @@
+/**
+ * @file
+ *
+ * @brief Inlined Routines from the Memory Management Manager
+ */
+
+/*
+ * Copyright (c) 2013 Hesham AL-Matary
+ * Copyright (c) 2013 Gedare Bloom.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifndef _RTEMS_SCORE_MM_H
+# error "Never use <rtems/score/mm.inl> directly; include <rtems/score/mm.h> instead."
+#endif
+
+#ifndef _RTEMS_SCORE_MM_INL
+#define _RTEMS_SCORE_MM_INL
+
+/**
+ * @addtogroup SuperCoreMM
+ */
+/**@{**/
+
+/**
+ * @brief Calls _CPU_Memory_management_Initialize.
+ */
+RTEMS_INLINE_ROUTINE void _Memory_management_Initialize( void )
+{
+#ifdef RTEMS_SMP
+   _SMP_lock_Initialize( &mm_lock );
+#endif
+
+  _CPU_Memory_management_Initialize();
+}
+
+/**
+ * @brief Calls _CPU_Memory_management_Install_entry.
+ */
+RTEMS_INLINE_ROUTINE void _Memory_management_Install_entry(
+  uintptr_t base,
+  size_t size,
+  uint32_t attr
+)
+{
+#ifdef RTEMS_SMP
+  _SMP_lock_Acquire( &mm_lock );
+#endif
+
+  _CPU_Memory_management_Install_entry(base, size, attr);
+
+#ifdef RTEMS_SMP
+  _SMP_lock_Release( &mm_lock );
+#endif
+}
+
+/**
+ * @brief Calls _CPU_Memory_management_Uninstall_entry.
+ */
+RTEMS_INLINE_ROUTINE void _Memory_management_Uninstall_entry(
+  uintptr_t base,
+  size_t size
+)
+{
+#ifdef RTEMS_SMP
+  _SMP_lock_Acquire( &mm_lock );
+#endif
+
+  _CPU_Memory_management_Uninstall_entry(base, size);
+
+#ifdef RTEMS_SMP
+  _SMP_lock_Release( &mm_lock );
+#endif
+
+}
+
+/** @}*/
+
+#endif
diff --git a/cpukit/score/preinstall.am b/cpukit/score/preinstall.am
index dc84b21..100f090 100644
--- a/cpukit/score/preinstall.am
+++ b/cpukit/score/preinstall.am
@@ -103,6 +103,10 @@ $(PROJECT_INCLUDE)/rtems/score/isrlevel.h: include/rtems/score/isrlevel.h $(PROJ
        $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/isrlevel.h
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/isrlevel.h

+$(PROJECT_INCLUDE)/rtems/score/mm.h: include/rtems/score/mm.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
+       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/mm.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/mm.h
+
 $(PROJECT_INCLUDE)/rtems/score/object.h: include/rtems/score/object.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
        $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/object.h
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/object.h
@@ -298,6 +302,10 @@ $(PROJECT_INCLUDE)/rtems/score/isr.inl: inline/rtems/score/isr.inl $(PROJECT_INC
        $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/isr.inl
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/isr.inl

+$(PROJECT_INCLUDE)/rtems/score/mm.inl: inline/rtems/score/mm.inl $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
+       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/mm.inl
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/mm.inl
+
 $(PROJECT_INCLUDE)/rtems/score/object.inl: inline/rtems/score/object.inl $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
        $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/object.inl
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/object.inl
diff --git a/testsuites/libtests/Makefile.am b/testsuites/libtests/Makefile.am
index d1ffabc..d56398b 100644
--- a/testsuites/libtests/Makefile.am
+++ b/testsuites/libtests/Makefile.am
@@ -16,7 +16,7 @@ SUBDIRS += flashdisk01
 SUBDIRS += bspcmdline01 cpuuse devfs01 devfs02 devfs03 devfs04 \
     deviceio01 devnullfatal01 dumpbuf01 gxx01 \
     malloctest malloc02 malloc03 malloc04 malloc05 heapwalk \
-    putenvtest monitor monitor02 rtmonuse stackchk stackchk01 \
+    putenvtest monitor monitor02 mmtest1 rtmonuse stackchk stackchk01 \
     termios termios01 termios02 termios03 termios04 termios05 \
     termios06 termios07 termios08 \
     rtems++ tztest block01 block02 block03 block04 block05 block06 block07 \
diff --git a/testsuites/libtests/configure.ac b/testsuites/libtests/configure.ac
index 741c603..c1dbb78 100644
--- a/testsuites/libtests/configure.ac
+++ b/testsuites/libtests/configure.ac
@@ -85,6 +85,7 @@ malloc02/Makefile
 malloc03/Makefile
 malloc04/Makefile
 malloc05/Makefile
+mmtest1/Makefile
 monitor/Makefile
 monitor02/Makefile
 mouse01/Makefile
diff --git a/testsuites/libtests/mmtest1/Makefile.am b/testsuites/libtests/mmtest1/Makefile.am
new file mode 100644
index 0000000..a08e557
--- /dev/null
+++ b/testsuites/libtests/mmtest1/Makefile.am
@@ -0,0 +1,18 @@
+
+rtems_tests_PROGRAMS = mmtest1
+mmtest1_SOURCES = init.c system.h
+
+dist_rtems_tests_DATA = mmtests.scn
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP at .cfg
+include $(top_srcdir)/../automake/compile.am
+include $(top_srcdir)/../automake/leaf.am
+
+LINK_OBJS = $(mmtest1_OBJECTS) $(mmtest1_LDADD)
+LINK_LIBS = $(mmtest1_LDLIBS)
+
+mmtest1$(EXEEXT): $(mmtest1_OBJECTS) $(mmtest1_DEPENDENCIES)
+         @rm -f mmtest1$(EXEEXT)
+         $(make-exe)
+
+include $(top_srcdir)/../automake/local.am
diff --git a/testsuites/libtests/mmtest1/init.c b/testsuites/libtests/mmtest1/init.c
new file mode 100644
index 0000000..b110044
--- /dev/null
+++ b/testsuites/libtests/mmtest1/init.c
@@ -0,0 +1,41 @@
+/* Init
+ *
+ * This routine is the initialization task for this test program.
+ *
+ */
+
+/*
+ * Copyright (c) 2013 Gedare Bloom.
+ * Copyright (c) 2012 Hesham Al-Matary.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
+#define CONFIGURE_INIT
+#include "system.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <rtems/score/mm.h>
+
+rtems_task Init(
+  rtems_task_argument ignored
+)
+{
+
+  puts( "\n\n*** Start of mmtest1 ***\n" );
+
+  printf("Test 1: Installing Entry-1 \
+and set it as Read only\n");
+  _Memory_management_Install_entry( 0x00100000, 0x200000, RTEMS_MM_REGION_PROTECTION_READ_ONLY);
+
+  printf("Test 2 : Installing Entry-2\
+and set it as Write enabled\n");
+  _Memory_management_Install_entry( 0x00400000, 0x100000, RTEMS_MM_REGION_PROTECTION_WRITE);
+
+  printf( "\n\n*** End of mmtest1 ***\n" );
+
+  exit( 0 );
+}
diff --git a/testsuites/libtests/mmtest1/mmtest1.doc b/testsuites/libtests/mmtest1/mmtest1.doc
new file mode 100644
index 0000000..210a761
--- /dev/null
+++ b/testsuites/libtests/mmtest1/mmtest1.doc
@@ -0,0 +1 @@
+Simple tests that tries to install memory management entries.
diff --git a/testsuites/libtests/mmtest1/mmtests.scn b/testsuites/libtests/mmtest1/mmtests.scn
new file mode 100644
index 0000000..6ba15c2
--- /dev/null
+++ b/testsuites/libtests/mmtest1/mmtests.scn
@@ -0,0 +1,7 @@
+*** Start of mmtest1 ***
+
+Test 1: Installing Entry-1 and set it as Read only
+Test 2 : Installing Entry-2and set it as Write enabled
+
+
+*** End of mmtest1 ***
diff --git a/testsuites/libtests/mmtest1/system.h b/testsuites/libtests/mmtest1/system.h
new file mode 100644
index 0000000..7560e1d
--- /dev/null
+++ b/testsuites/libtests/mmtest1/system.h
@@ -0,0 +1,33 @@
+/* system.h
+ *
+ * Copyright (c) 2013 Gedare Bloom.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#include <rtems.h>
+
+/* functions */
+
+rtems_task Init(
+  rtems_task_argument argument
+);
+
+/* configuration information */
+
+#include <bsp.h> /* for device driver prototypes */
+
+/* NOTICE: the clock driver is explicitly disabled */
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS            9
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
+
+#include <rtems/confdefs.h>
+/* end of include file */
--
1.8.3.1

_______________________________________________
rtems-devel mailing list
rtems-devel at rtems.org
http://www.rtems.org/mailman/listinfo/rtems-devel






More information about the devel mailing list