[rtems commit] config: Improve EDF SMP scheduler configuration

Sebastian Huber sebh at rtems.org
Fri Dec 20 06:17:18 UTC 2019


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

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Dec 19 11:38:45 2019 +0100

config: Improve EDF SMP scheduler configuration

Use CONFIGURE_MAXIMUM_PROCESSORS to configure the EDF SMP scheduler
context.  This avoids hard to debug configuration errors resulting in
memory corruptions.

Close #3815.

---

 cpukit/include/rtems/confdefs.h           |  3 +--
 cpukit/include/rtems/scheduler.h          | 10 +++++++---
 testsuites/smptests/smpschededf01/init.c  |  2 +-
 testsuites/smptests/smpschededf04/init.c  |  4 ++--
 testsuites/smptests/smpscheduler02/init.c |  2 +-
 testsuites/smptests/smpscheduler07/init.c |  2 +-
 testsuites/smptests/smpthreadpin01/init.c |  4 ++--
 7 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/cpukit/include/rtems/confdefs.h b/cpukit/include/rtems/confdefs.h
index b98dffb..76e2167 100644
--- a/cpukit/include/rtems/confdefs.h
+++ b/cpukit/include/rtems/confdefs.h
@@ -916,8 +916,7 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
 
   #if !defined(CONFIGURE_SCHEDULER_TABLE_ENTRIES)
     /** Configure the context needed by the scheduler instance */
-    #define CONFIGURE_SCHEDULER \
-      RTEMS_SCHEDULER_EDF_SMP(dflt, _CONFIGURE_MAXIMUM_PROCESSORS)
+    #define CONFIGURE_SCHEDULER RTEMS_SCHEDULER_EDF_SMP(dflt)
 
     /** Configure the controls for this scheduler instance */
     #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
diff --git a/cpukit/include/rtems/scheduler.h b/cpukit/include/rtems/scheduler.h
index 336ca71..dbc161a 100644
--- a/cpukit/include/rtems/scheduler.h
+++ b/cpukit/include/rtems/scheduler.h
@@ -112,13 +112,17 @@
 #ifdef CONFIGURE_SCHEDULER_EDF_SMP
   #include <rtems/score/scheduleredfsmp.h>
 
+  #ifndef CONFIGURE_MAXIMUM_PROCESSORS
+    #error "CONFIGURE_MAXIMUM_PROCESSORS must be defined to configure the EDF SMP scheduler"
+  #endif
+
   #define SCHEDULER_EDF_SMP_CONTEXT_NAME( name ) \
     SCHEDULER_CONTEXT_NAME( EDF_SMP_ ## name )
 
-  #define RTEMS_SCHEDULER_EDF_SMP( name, max_cpu_count ) \
+  #define RTEMS_SCHEDULER_EDF_SMP( name ) \
     static struct { \
       Scheduler_EDF_SMP_Context Base; \
-      Scheduler_EDF_SMP_Ready_queue Ready[ ( max_cpu_count ) + 1 ]; \
+      Scheduler_EDF_SMP_Ready_queue Ready[ CONFIGURE_MAXIMUM_PROCESSORS + 1 ]; \
     } SCHEDULER_EDF_SMP_CONTEXT_NAME( name )
 
   #define RTEMS_SCHEDULER_TABLE_EDF_SMP( name, obj_name ) \
@@ -132,7 +136,7 @@
   /* Provided for backward compatibility */
 
   #define RTEMS_SCHEDULER_CONTEXT_EDF_SMP( name, max_cpu_count ) \
-    RTEMS_SCHEDULER_EDF_SMP( name, max_cpu_count )
+    RTEMS_SCHEDULER_EDF_SMP( name )
 
   #define RTEMS_SCHEDULER_CONTROL_EDF_SMP( name, obj_name ) \
     RTEMS_SCHEDULER_TABLE_EDF_SMP( name, obj_name )
diff --git a/testsuites/smptests/smpschededf01/init.c b/testsuites/smptests/smpschededf01/init.c
index c049c63..c87d31d 100644
--- a/testsuites/smptests/smpschededf01/init.c
+++ b/testsuites/smptests/smpschededf01/init.c
@@ -137,7 +137,7 @@ static void Init(rtems_task_argument arg)
 
 #include <rtems/scheduler.h>
 
-RTEMS_SCHEDULER_EDF_SMP(a, CONFIGURE_MAXIMUM_PROCESSORS);
+RTEMS_SCHEDULER_EDF_SMP(a);
 
 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
   RTEMS_SCHEDULER_TABLE_EDF_SMP(a, rtems_build_name('E', 'D', 'F', ' '))
diff --git a/testsuites/smptests/smpschededf04/init.c b/testsuites/smptests/smpschededf04/init.c
index 851c1f6..c72d7b6 100644
--- a/testsuites/smptests/smpschededf04/init.c
+++ b/testsuites/smptests/smpschededf04/init.c
@@ -112,9 +112,9 @@ static void Init(rtems_task_argument arg)
 
 #include <rtems/scheduler.h>
 
-RTEMS_SCHEDULER_EDF_SMP(a, CONFIGURE_MAXIMUM_PROCESSORS);
+RTEMS_SCHEDULER_EDF_SMP(a);
 
-RTEMS_SCHEDULER_EDF_SMP(b, CONFIGURE_MAXIMUM_PROCESSORS);
+RTEMS_SCHEDULER_EDF_SMP(b);
 
 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
   RTEMS_SCHEDULER_TABLE_EDF_SMP(a, MAIN), \
diff --git a/testsuites/smptests/smpscheduler02/init.c b/testsuites/smptests/smpscheduler02/init.c
index 9fdd5b9..6cfa591 100644
--- a/testsuites/smptests/smpscheduler02/init.c
+++ b/testsuites/smptests/smpscheduler02/init.c
@@ -439,7 +439,7 @@ static void Init(rtems_task_argument arg)
 
 RTEMS_SCHEDULER_PRIORITY_SMP(a, 256);
 
-RTEMS_SCHEDULER_EDF_SMP(b, CONFIGURE_MAXIMUM_PROCESSORS);
+RTEMS_SCHEDULER_EDF_SMP(b);
 
 RTEMS_SCHEDULER_SIMPLE_SMP(c);
 
diff --git a/testsuites/smptests/smpscheduler07/init.c b/testsuites/smptests/smpscheduler07/init.c
index 9fb77c6..4583a5e 100644
--- a/testsuites/smptests/smpscheduler07/init.c
+++ b/testsuites/smptests/smpscheduler07/init.c
@@ -32,7 +32,7 @@ const char rtems_test_name[] = "SMPSCHEDULER 7";
 
 #include <rtems/scheduler.h>
 
-RTEMS_SCHEDULER_EDF_SMP(a, CONFIGURE_MAXIMUM_PROCESSORS);
+RTEMS_SCHEDULER_EDF_SMP(a);
 
 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
   RTEMS_SCHEDULER_TABLE_EDF_SMP( a, rtems_build_name('T', 'E', 'S', 'T'))
diff --git a/testsuites/smptests/smpthreadpin01/init.c b/testsuites/smptests/smpthreadpin01/init.c
index 9bcf914..7c3c9b2 100644
--- a/testsuites/smptests/smpthreadpin01/init.c
+++ b/testsuites/smptests/smpthreadpin01/init.c
@@ -597,9 +597,9 @@ static void Init(rtems_task_argument arg)
 
 #include <rtems/scheduler.h>
 
-RTEMS_SCHEDULER_EDF_SMP(a, CONFIGURE_MAXIMUM_PROCESSORS);
+RTEMS_SCHEDULER_EDF_SMP(a);
 
-RTEMS_SCHEDULER_EDF_SMP(b, CONFIGURE_MAXIMUM_PROCESSORS);
+RTEMS_SCHEDULER_EDF_SMP(b);
 
 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
   RTEMS_SCHEDULER_TABLE_EDF_SMP(a, SCHED_A), \



More information about the vc mailing list