summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cpukit/sapi/include/confdefs.h8
-rw-r--r--cpukit/sapi/src/exinit.c2
-rw-r--r--cpukit/score/include/rtems/sysinit.h3
-rw-r--r--cpukit/score/src/threaddispatch.c2
-rw-r--r--cpukit/score/src/userext.c23
-rw-r--r--doc/user/init.t8
-rw-r--r--testsuites/sptests/spsysinit01/init.c17
7 files changed, 43 insertions, 20 deletions
diff --git a/cpukit/sapi/include/confdefs.h b/cpukit/sapi/include/confdefs.h
index 8635ca02d4..8f5906d067 100644
--- a/cpukit/sapi/include/confdefs.h
+++ b/cpukit/sapi/include/confdefs.h
@@ -26,8 +26,10 @@
* Include the executive's configuration
*/
#include <rtems.h>
+#include <rtems/sysinit.h>
#include <rtems/score/apimutex.h>
#include <rtems/score/percpu.h>
+#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
#ifdef CONFIGURE_DISABLE_BSP_SETTINGS
@@ -2394,6 +2396,12 @@ const rtems_libio_helper rtems_fs_init_helper =
#define CONFIGURE_INITIAL_EXTENSION_TABLE Configuration_Initial_Extensions
#define CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS \
RTEMS_ARRAY_SIZE(Configuration_Initial_Extensions)
+
+ RTEMS_SYSINIT_ITEM(
+ _User_extensions_Handler_initialization,
+ RTEMS_SYSINIT_INITIAL_EXTENSIONS,
+ RTEMS_SYSINIT_ORDER_MIDDLE
+ );
#else
#define CONFIGURE_INITIAL_EXTENSION_TABLE NULL
#define CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS 0
diff --git a/cpukit/sapi/src/exinit.c b/cpukit/sapi/src/exinit.c
index faaf283a30..685197df90 100644
--- a/cpukit/sapi/src/exinit.c
+++ b/cpukit/sapi/src/exinit.c
@@ -47,7 +47,6 @@
#include <rtems/score/timecounter.h>
#include <rtems/score/threadimpl.h>
#include <rtems/score/todimpl.h>
-#include <rtems/score/userextimpl.h>
#include <rtems/score/watchdogimpl.h>
#include <rtems/score/wkspace.h>
@@ -113,7 +112,6 @@ static void rtems_initialize_data_structures(void)
_Thread_Dispatch_initialization();
- _User_extensions_Handler_initialization();
_ISR_Handler_initialization();
_API_Mutex_Initialization( 2 );
diff --git a/cpukit/score/include/rtems/sysinit.h b/cpukit/score/include/rtems/sysinit.h
index e6fe62f230..49c465bfbc 100644
--- a/cpukit/score/include/rtems/sysinit.h
+++ b/cpukit/score/include/rtems/sysinit.h
@@ -28,7 +28,8 @@ extern "C" {
*/
#define RTEMS_SYSINIT_BSP_WORK_AREAS 000100
#define RTEMS_SYSINIT_BSP_START 000200
-#define RTEMS_SYSINIT_DATA_STRUCTURES 000300
+#define RTEMS_SYSINIT_INITIAL_EXTENSIONS 000300
+#define RTEMS_SYSINIT_DATA_STRUCTURES 000301
#define RTEMS_SYSINIT_IDLE_THREADS 000380
#define RTEMS_SYSINIT_BSP_LIBC 000400
#define RTEMS_SYSINIT_BEFORE_DRIVERS 000500
diff --git a/cpukit/score/src/threaddispatch.c b/cpukit/score/src/threaddispatch.c
index 3ae8335fef..00c2f095a2 100644
--- a/cpukit/score/src/threaddispatch.c
+++ b/cpukit/score/src/threaddispatch.c
@@ -30,6 +30,8 @@
#include <rtems/score/wkspace.h>
#include <rtems/config.h>
+CHAIN_DEFINE_EMPTY( _User_extensions_Switches_list );
+
static Thread_Action *_Thread_Get_post_switch_action(
Thread_Control *executing
)
diff --git a/cpukit/score/src/userext.c b/cpukit/score/src/userext.c
index 1328f68b42..1ac622e093 100644
--- a/cpukit/score/src/userext.c
+++ b/cpukit/score/src/userext.c
@@ -23,8 +23,6 @@
#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
-CHAIN_DEFINE_EMPTY( _User_extensions_Switches_list );
-
typedef struct {
User_extensions_Switch_control *switch_control;
} User_extensions_Switch_context;
@@ -50,17 +48,12 @@ static void _User_extensions_Switch_visitor(
void _User_extensions_Handler_initialization(void)
{
- uint32_t number_of_initial_extensions =
- rtems_configuration_get_number_of_initial_extensions();
-
- if ( number_of_initial_extensions > 0 ) {
- User_extensions_Switch_control *initial_extension_switch_controls =
- _Workspace_Allocate_or_fatal_error(
- number_of_initial_extensions
- * sizeof( *initial_extension_switch_controls )
- );
- User_extensions_Switch_context ctx = { initial_extension_switch_controls };
-
- _User_extensions_Iterate( &ctx, _User_extensions_Switch_visitor );
- }
+ User_extensions_Switch_control *initial_extension_switch_controls =
+ _Workspace_Allocate_or_fatal_error(
+ rtems_configuration_get_number_of_initial_extensions()
+ * sizeof( *initial_extension_switch_controls )
+ );
+ User_extensions_Switch_context ctx = { initial_extension_switch_controls };
+
+ _User_extensions_Iterate( &ctx, _User_extensions_Switch_visitor );
}
diff --git a/doc/user/init.t b/doc/user/init.t
index c5ebc0d8c8..5ab011e9e6 100644
--- a/doc/user/init.t
+++ b/doc/user/init.t
@@ -157,12 +157,16 @@ initialized by the Board Support Package. This step is mandatory.
Basic initialization step provided by the Board Support Package. This step is
mandatory.
+@item RTEMS_SYSINIT_INITIAL_EXTENSIONS
+Initializes the initial extensions if at least one is configured by the Board
+Support Package or application.
+
@item RTEMS_SYSINIT_DATA_STRUCTURES
This directive is called when the Board Support Package has completed its basic
initialization and allows RTEMS to initialize the application environment based
upon the information in the Configuration Table, User Initialization Tasks
-Table, Device Driver Table, User Extension Table, Multiprocessor Configuration
-Table, and the Multiprocessor Communications Interface (MPCI) Table.
+Table, Device Driver Table, Multiprocessor Configuration Table, and the
+Multiprocessor Communications Interface (MPCI) Table.
@item RTEMS_SYSINIT_BSP_LIBC
Depending on the application configuration the IO library and root filesystem
diff --git a/testsuites/sptests/spsysinit01/init.c b/testsuites/sptests/spsysinit01/init.c
index fd34264d93..2bc859b880 100644
--- a/testsuites/sptests/spsysinit01/init.c
+++ b/testsuites/sptests/spsysinit01/init.c
@@ -26,6 +26,7 @@
#include <rtems/score/apimutex.h>
#include <rtems/score/sysstate.h>
+#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
const char rtems_test_name[] = "SPSYSINIT 1";
@@ -35,6 +36,8 @@ typedef enum {
BSP_WORK_AREAS_POST,
BSP_START_PRE,
BSP_START_POST,
+ INITIAL_EXTENSIONS_PRE,
+ INITIAL_EXTENSIONS_POST,
DATA_STRUCTURES_PRE,
DATA_STRUCTURES_POST,
IDLE_THREADS_PRE,
@@ -106,6 +109,18 @@ LAST(RTEMS_SYSINIT_BSP_START)
next_step(BSP_START_POST);
}
+FIRST(RTEMS_SYSINIT_INITIAL_EXTENSIONS)
+{
+ assert(_Chain_Is_empty(&_User_extensions_Switches_list));
+ next_step(INITIAL_EXTENSIONS_PRE);
+}
+
+LAST(RTEMS_SYSINIT_INITIAL_EXTENSIONS)
+{
+ assert(!_Chain_Is_empty(&_User_extensions_Switches_list));
+ next_step(INITIAL_EXTENSIONS_POST);
+}
+
FIRST(RTEMS_SYSINIT_DATA_STRUCTURES)
{
assert(_RTEMS_Allocator_Mutex == NULL);
@@ -205,6 +220,8 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+#define CONFIGURE_STACK_CHECKER_ENABLED
+
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
#define CONFIGURE_INIT