[rtems commit] score: Refine system initialization order

Sebastian Huber sebh at rtems.org
Mon Jun 20 06:21:10 UTC 2016


Module:    rtems
Branch:    master
Commit:    bc47ec1c99cb519a26fea585c2945c47b234b941
Changeset: http://git.rtems.org/rtems/commit/?id=bc47ec1c99cb519a26fea585c2945c47b234b941

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Mon Jun 20 06:50:12 2016 +0200

score: Refine system initialization order

---

 cpukit/score/include/rtems/sysinit.h  | 16 +++++++++++++---
 testsuites/sptests/spsysinit01/init.c | 36 +++++++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+), 3 deletions(-)

diff --git a/cpukit/score/include/rtems/sysinit.h b/cpukit/score/include/rtems/sysinit.h
index e7b9c63..ad68c45 100644
--- a/cpukit/score/include/rtems/sysinit.h
+++ b/cpukit/score/include/rtems/sysinit.h
@@ -72,15 +72,25 @@ extern "C" {
 #define RTEMS_SYSINIT_CLASSIC_USER_TASKS         000706
 #define RTEMS_SYSINIT_POSIX_USER_THREADS         000707
 #define RTEMS_SYSINIT_STD_FILE_DESCRIPTORS       000800
+#define RTEMS_SYSINIT_LAST                       ffffff
 
 /*
  * The value of each order define must consist of exactly two hexadecimal
  * digits without a 0x-prefix.  A 0x-prefix is concatenated with the module and
  * order values to form a proper integer literal.
  */
-#define RTEMS_SYSINIT_ORDER_FIRST  00
-#define RTEMS_SYSINIT_ORDER_MIDDLE 08
-#define RTEMS_SYSINIT_ORDER_LAST   0f
+#define RTEMS_SYSINIT_ORDER_FIRST   00
+#define RTEMS_SYSINIT_ORDER_SECOND  01
+#define RTEMS_SYSINIT_ORDER_THIRD   02
+#define RTEMS_SYSINIT_ORDER_FOURTH  03
+#define RTEMS_SYSINIT_ORDER_FIFTH   04
+#define RTEMS_SYSINIT_ORDER_SIXTH   05
+#define RTEMS_SYSINIT_ORDER_SEVENTH 06
+#define RTEMS_SYSINIT_ORDER_EIGHTH  07
+#define RTEMS_SYSINIT_ORDER_NINETH  08
+#define RTEMS_SYSINIT_ORDER_TENTH   09
+#define RTEMS_SYSINIT_ORDER_MIDDLE  80
+#define RTEMS_SYSINIT_ORDER_LAST    ff
 
 typedef void ( *rtems_sysinit_handler )( void );
 
diff --git a/testsuites/sptests/spsysinit01/init.c b/testsuites/sptests/spsysinit01/init.c
index 88185da..1ce22d5 100644
--- a/testsuites/sptests/spsysinit01/init.c
+++ b/testsuites/sptests/spsysinit01/init.c
@@ -143,6 +143,18 @@ typedef enum {
 #endif /* RTEMS_POSIX_API */
   STD_FILE_DESCRIPTORS_PRE,
   STD_FILE_DESCRIPTORS_POST,
+  LAST_FIRST,
+  LAST_SECOND,
+  LAST_THIRD,
+  LAST_FOURTH,
+  LAST_FIFTH,
+  LAST_SIXTH,
+  LAST_SEVENTH,
+  LAST_EIGHTH,
+  LAST_NINETH,
+  LAST_TENTH,
+  LAST_MIDDLE,
+  LAST_LAST,
   INIT_TASK,
   DONE
 } init_step;
@@ -165,6 +177,17 @@ typedef enum {
   ); \
   static void x##_last(void)
 
+#define LAST_STEP(x) \
+  static void last_##x(void) \
+  { \
+    next_step(LAST_##x); \
+  } \
+  RTEMS_SYSINIT_ITEM( \
+    last_##x, \
+    RTEMS_SYSINIT_LAST, \
+    RTEMS_SYSINIT_ORDER_##x \
+  )
+
 static init_step step;
 
 static void next_step(init_step expected)
@@ -674,6 +697,19 @@ LAST(RTEMS_SYSINIT_STD_FILE_DESCRIPTORS)
   next_step(STD_FILE_DESCRIPTORS_POST);
 }
 
+LAST_STEP(FIRST);
+LAST_STEP(SECOND);
+LAST_STEP(THIRD);
+LAST_STEP(FOURTH);
+LAST_STEP(FIFTH);
+LAST_STEP(SIXTH);
+LAST_STEP(SEVENTH);
+LAST_STEP(EIGHTH);
+LAST_STEP(NINETH);
+LAST_STEP(TENTH);
+LAST_STEP(MIDDLE);
+LAST_STEP(LAST);
+
 static void Init(rtems_task_argument arg)
 {
 #ifdef RTEMS_POSIX_API



More information about the vc mailing list