[PATCH 1/2] score: SMP_FATAL_SCHEDULER_WITHOUT_PROCESSORS

Sebastian Huber sebastian.huber at embedded-brains.de
Fri May 2 11:39:08 UTC 2014


Avoid the SMP_FATAL_SCHEDULER_WITHOUT_PROCESSORS fatal error and make it
a run-time error in rtems_scheduler_ident() and _Scheduler_Get_by_id().
---
 cpukit/rtems/include/rtems/rtems/tasks.h         |    2 +
 cpukit/rtems/src/schedulerident.c                |   12 +++-
 cpukit/score/include/rtems/score/schedulerimpl.h |   21 +++++-
 cpukit/score/include/rtems/score/smpimpl.h       |    1 -
 cpukit/score/src/smp.c                           |   16 ----
 doc/user/conf.t                                  |    2 -
 doc/user/smp.t                                   |    4 +-
 testsuites/smptests/Makefile.am                  |    1 -
 testsuites/smptests/configure.ac                 |    1 -
 testsuites/smptests/smpfatal06/Makefile.am       |   19 -----
 testsuites/smptests/smpfatal06/init.c            |   81 ----------------------
 testsuites/smptests/smpfatal06/smpfatal06.doc    |   11 ---
 testsuites/smptests/smpfatal06/smpfatal06.scn    |    2 -
 testsuites/smptests/smpscheduler02/init.c        |   56 +++++++++++++--
 14 files changed, 82 insertions(+), 147 deletions(-)
 delete mode 100644 testsuites/smptests/smpfatal06/Makefile.am
 delete mode 100644 testsuites/smptests/smpfatal06/init.c
 delete mode 100644 testsuites/smptests/smpfatal06/smpfatal06.doc
 delete mode 100644 testsuites/smptests/smpfatal06/smpfatal06.scn

diff --git a/cpukit/rtems/include/rtems/rtems/tasks.h b/cpukit/rtems/include/rtems/rtems/tasks.h
index a9016ce..43e8c8a 100644
--- a/cpukit/rtems/include/rtems/rtems/tasks.h
+++ b/cpukit/rtems/include/rtems/rtems/tasks.h
@@ -597,6 +597,8 @@ rtems_id rtems_task_self(void);
  * @retval RTEMS_SUCCESSFUL Successful operation.
  * @retval RTEMS_INVALID_ADDRESS The @a id parameter is @c NULL.
  * @retval RTEMS_INVALID_NAME Invalid scheduler name.
+ * @retval RTEMS_UNSATISFIED A scheduler with this name exists, but the
+ * processor set of this scheduler is empty.
  */
 rtems_status_code rtems_scheduler_ident(
   rtems_name  name,
diff --git a/cpukit/rtems/src/schedulerident.c b/cpukit/rtems/src/schedulerident.c
index d9e913c..ee18af0 100644
--- a/cpukit/rtems/src/schedulerident.c
+++ b/cpukit/rtems/src/schedulerident.c
@@ -33,9 +33,15 @@ rtems_status_code rtems_scheduler_ident(
     sc = RTEMS_INVALID_NAME;
 
     for ( i = 0 ; i < n && sc == RTEMS_INVALID_NAME ; ++i ) {
-      if ( _Scheduler_Table[ i ].name == name ) {
-        *id = _Scheduler_Build_id( i );
-        sc = RTEMS_SUCCESSFUL;
+      const Scheduler_Control *scheduler = &_Scheduler_Table[ i ];
+
+      if ( scheduler->name == name ) {
+        if ( _Scheduler_Get_processor_count( scheduler ) > 0 ) {
+          *id = _Scheduler_Build_id( i );
+          sc = RTEMS_SUCCESSFUL;
+        } else {
+          sc = RTEMS_UNSATISFIED;
+        }
       }
     }
   } else {
diff --git a/cpukit/score/include/rtems/score/schedulerimpl.h b/cpukit/score/include/rtems/score/schedulerimpl.h
index 35054df..6fad4e2 100644
--- a/cpukit/score/include/rtems/score/schedulerimpl.h
+++ b/cpukit/score/include/rtems/score/schedulerimpl.h
@@ -571,6 +571,19 @@ RTEMS_INLINE_ROUTINE void _Scheduler_Change_priority_if_higher(
   }
 }
 
+RTEMS_INLINE_ROUTINE uint32_t _Scheduler_Get_processor_count(
+  const Scheduler_Control *scheduler
+)
+{
+#if defined(RTEMS_SMP)
+  return scheduler->context->processor_count;
+#else
+  (void) scheduler;
+
+  return 1;
+#endif
+}
+
 RTEMS_INLINE_ROUTINE Objects_Id _Scheduler_Build_id( uint32_t scheduler_index )
 {
   return _Objects_Build_id(
@@ -583,15 +596,17 @@ RTEMS_INLINE_ROUTINE Objects_Id _Scheduler_Build_id( uint32_t scheduler_index )
 
 RTEMS_INLINE_ROUTINE bool _Scheduler_Get_by_id(
   Objects_Id                id,
-  const Scheduler_Control **scheduler
+  const Scheduler_Control **scheduler_p
 )
 {
   uint32_t minimum_id = _Scheduler_Build_id( 0 );
   uint32_t index = id - minimum_id;
+  const Scheduler_Control *scheduler = &_Scheduler_Table[ index ];
 
-  *scheduler = &_Scheduler_Table[ index ];
+  *scheduler_p = scheduler;
 
-  return index < _Scheduler_Count;
+  return index < _Scheduler_Count
+    && _Scheduler_Get_processor_count( scheduler ) > 0;
 }
 
 RTEMS_INLINE_ROUTINE uint32_t _Scheduler_Get_index(
diff --git a/cpukit/score/include/rtems/score/smpimpl.h b/cpukit/score/include/rtems/score/smpimpl.h
index c281592..27cf188 100644
--- a/cpukit/score/include/rtems/score/smpimpl.h
+++ b/cpukit/score/include/rtems/score/smpimpl.h
@@ -52,7 +52,6 @@ typedef enum {
   SMP_FATAL_BOOT_PROCESSOR_NOT_ASSIGNED_TO_SCHEDULER,
   SMP_FATAL_MANDATORY_PROCESSOR_NOT_PRESENT,
   SMP_FATAL_MULTITASKING_START_ON_UNASSIGNED_PROCESSOR,
-  SMP_FATAL_SCHEDULER_WITHOUT_PROCESSORS,
   SMP_FATAL_START_OF_MANDATORY_PROCESSOR_FAILED
 } SMP_Fatal_code;
 
diff --git a/cpukit/score/src/smp.c b/cpukit/score/src/smp.c
index f03a4c0..34db46ad 100644
--- a/cpukit/score/src/smp.c
+++ b/cpukit/score/src/smp.c
@@ -25,20 +25,6 @@
 #include <rtems/score/threadimpl.h>
 #include <rtems/config.h>
 
-static void _SMP_Check_scheduler_configuration( void )
-{
-  size_t n = _Scheduler_Count;
-  size_t i;
-
-  for ( i = 0 ; i < n ; ++i ) {
-    const Scheduler_Control *scheduler = &_Scheduler_Table[ i ];
-
-    if ( scheduler->context->processor_count == 0 ) {
-      _SMP_Fatal( SMP_FATAL_SCHEDULER_WITHOUT_PROCESSORS );
-    }
-  }
-}
-
 static void _SMP_Start_processors( uint32_t cpu_count )
 {
   uint32_t cpu_index_self = _SMP_Get_current_processor();
@@ -75,8 +61,6 @@ static void _SMP_Start_processors( uint32_t cpu_count )
       ++assignment->scheduler->context->processor_count;
     }
   }
-
-  _SMP_Check_scheduler_configuration();
 }
 
 void _SMP_Handler_initialize( void )
diff --git a/doc/user/conf.t b/doc/user/conf.t
index 3a03df1..2c8c5f2 100644
--- a/doc/user/conf.t
+++ b/doc/user/conf.t
@@ -3931,8 +3931,6 @@ processors.  The processor demand must be reduced for this system.
 mandatory processor failed during system initialization.  The system may not
 have this processor at all or it could be a problem with a boot loader for
 example.  Check the @code{CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS} definition.
- at item @code{SMP_FATAL_SCHEDULER_WITHOUT_PROCESSORS} - it is prohibited to have
-a scheduler managing the empty processor set.
 @item @code{SMP_FATAL_MULTITASKING_START_ON_UNASSIGNED_PROCESSOR} - it is not
 allowed to start multitasking on a processor with no scheduler assigned.
 @end itemize
diff --git a/doc/user/smp.t b/doc/user/smp.t
index 3d9cc29..65f5bd7 100644
--- a/doc/user/smp.t
+++ b/doc/user/smp.t
@@ -336,7 +336,9 @@ rtems_status_code rtems_scheduler_ident(
 
 @code{@value{RPREFIX}SUCCESSFUL} - successful operation@*
 @code{@value{RPREFIX}INVALID_ADDRESS} - @code{id} is NULL@*
- at code{@value{RPREFIX}INVALID_NAME} - invalid scheduler name
+ at code{@value{RPREFIX}INVALID_NAME} - invalid scheduler name@*
+ at code{@value{RPREFIX}UNSATISFIED} - - a scheduler with this name exists, but
+the processor set of this scheduler is empty
 
 @subheading DESCRIPTION:
 
diff --git a/testsuites/smptests/Makefile.am b/testsuites/smptests/Makefile.am
index e757cf2..f16d396 100644
--- a/testsuites/smptests/Makefile.am
+++ b/testsuites/smptests/Makefile.am
@@ -16,7 +16,6 @@ SUBDIRS += smpfatal02
 SUBDIRS += smpfatal03
 SUBDIRS += smpfatal04
 SUBDIRS += smpfatal05
-SUBDIRS += smpfatal06
 SUBDIRS += smpfatal07
 SUBDIRS += smpfatal08
 SUBDIRS += smpload01
diff --git a/testsuites/smptests/configure.ac b/testsuites/smptests/configure.ac
index ee36b50..e3857f1 100644
--- a/testsuites/smptests/configure.ac
+++ b/testsuites/smptests/configure.ac
@@ -71,7 +71,6 @@ smpfatal02/Makefile
 smpfatal03/Makefile
 smpfatal04/Makefile
 smpfatal05/Makefile
-smpfatal06/Makefile
 smpfatal07/Makefile
 smpfatal08/Makefile
 smpload01/Makefile
diff --git a/testsuites/smptests/smpfatal06/Makefile.am b/testsuites/smptests/smpfatal06/Makefile.am
deleted file mode 100644
index c0bdf5b..0000000
--- a/testsuites/smptests/smpfatal06/Makefile.am
+++ /dev/null
@@ -1,19 +0,0 @@
-rtems_tests_PROGRAMS = smpfatal06
-smpfatal06_SOURCES = init.c
-
-dist_rtems_tests_DATA = smpfatal06.scn smpfatal06.doc
-
-include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP at .cfg
-include $(top_srcdir)/../automake/compile.am
-include $(top_srcdir)/../automake/leaf.am
-
-AM_CPPFLAGS += -I$(top_srcdir)/../support/include
-
-LINK_OBJS = $(smpfatal06_OBJECTS)
-LINK_LIBS = $(smpfatal06_LDLIBS)
-
-smpfatal06$(EXEEXT): $(smpfatal06_OBJECTS) $(smpfatal06_DEPENDENCIES)
-	@rm -f smpfatal06$(EXEEXT)
-	$(make-exe)
-
-include $(top_srcdir)/../automake/local.am
diff --git a/testsuites/smptests/smpfatal06/init.c b/testsuites/smptests/smpfatal06/init.c
deleted file mode 100644
index 739da7a..0000000
--- a/testsuites/smptests/smpfatal06/init.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2014 embedded brains GmbH.  All rights reserved.
- *
- *  embedded brains GmbH
- *  Dornierstr. 4
- *  82178 Puchheim
- *  Germany
- *  <rtems at embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#ifdef HAVE_CONFIG_H
-  #include "config.h"
-#endif
-
-#include <rtems.h>
-#include <rtems/test.h>
-#include <rtems/score/smpimpl.h>
-
-#include <assert.h>
-#include <stdlib.h>
-
-const char rtems_test_name[] = "SMPFATAL 6";
-
-static void Init(rtems_task_argument arg)
-{
-  assert(0);
-}
-
-static void fatal_extension(
-  rtems_fatal_source source,
-  bool is_internal,
-  rtems_fatal_code code
-)
-{
-  rtems_test_begink();
-
-  if (
-    source == RTEMS_FATAL_SOURCE_SMP
-      && !is_internal
-      && code == SMP_FATAL_SCHEDULER_WITHOUT_PROCESSORS
-  ) {
-    rtems_test_endk();
-  }
-}
-
-#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
-#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
-
-#define CONFIGURE_INITIAL_EXTENSIONS \
-  { .fatal = fatal_extension }, \
-  RTEMS_TEST_INITIAL_EXTENSION
-
-#define CONFIGURE_SMP_APPLICATION
-
-#define CONFIGURE_SMP_MAXIMUM_PROCESSORS 1
-
-#define CONFIGURE_SCHEDULER_SIMPLE_SMP
-
-#include <rtems/scheduler.h>
-
-RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP(a);
-RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP(b);
-
-#define CONFIGURE_SCHEDULER_CONTROLS \
-  RTEMS_SCHEDULER_CONTROL_SIMPLE_SMP(a, rtems_build_name('S', 'I', 'M', 'P')), \
-  RTEMS_SCHEDULER_CONTROL_SIMPLE_SMP(b, rtems_build_name('S', 'I', 'M', 'P'))
-
-#define CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS \
-  RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY)
-
-#define CONFIGURE_MAXIMUM_TASKS 1
-
-#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-
-#define CONFIGURE_INIT
-
-#include <rtems/confdefs.h>
diff --git a/testsuites/smptests/smpfatal06/smpfatal06.doc b/testsuites/smptests/smpfatal06/smpfatal06.doc
deleted file mode 100644
index e35b3b0..0000000
--- a/testsuites/smptests/smpfatal06/smpfatal06.doc
+++ /dev/null
@@ -1,11 +0,0 @@
-This file describes the directives and concepts tested by this test set.
-
-test set name: smpfatal06
-
-directives:
-
-  - _SMP_Handler_initialize()
-
-concepts:
-
-  - Ensure that a scheduler without processor leads to a fatal error.
diff --git a/testsuites/smptests/smpfatal06/smpfatal06.scn b/testsuites/smptests/smpfatal06/smpfatal06.scn
deleted file mode 100644
index 575b2b3..0000000
--- a/testsuites/smptests/smpfatal06/smpfatal06.scn
+++ /dev/null
@@ -1,2 +0,0 @@
-*** TEST SMPFATAL 6 ***
-*** END OF TEST SMPFATAL 6 ***
diff --git a/testsuites/smptests/smpscheduler02/init.c b/testsuites/smptests/smpscheduler02/init.c
index f958744..1e6b6d5 100644
--- a/testsuites/smptests/smpscheduler02/init.c
+++ b/testsuites/smptests/smpscheduler02/init.c
@@ -25,12 +25,12 @@ const char rtems_test_name[] = "SMPSCHEDULER 2";
 
 #if defined(__RTEMS_HAVE_SYS_CPUSET_H__)
 
-#define CPU_COUNT 2
-
 #define SCHED_A rtems_build_name(' ', ' ', ' ', 'A')
 
 #define SCHED_B rtems_build_name(' ', ' ', ' ', 'B')
 
+#define SCHED_C rtems_build_name(' ', ' ', ' ', 'C')
+
 static rtems_id main_task_id;
 
 static void task(rtems_task_argument arg)
@@ -56,6 +56,7 @@ static void test(void)
   rtems_id scheduler_id;
   rtems_id scheduler_a_id;
   rtems_id scheduler_b_id;
+  rtems_id scheduler_c_id;
   cpu_set_t cpuset;
   cpu_set_t first_cpu;
   cpu_set_t second_cpu;
@@ -82,6 +83,9 @@ static void test(void)
   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
   rtems_test_assert(scheduler_a_id != scheduler_b_id);
 
+  sc = rtems_scheduler_ident(SCHED_C, &scheduler_c_id);
+  rtems_test_assert(sc == RTEMS_UNSATISFIED);
+
   CPU_ZERO(&cpuset);
   sc = rtems_scheduler_get_processor_set(
     scheduler_a_id,
@@ -122,6 +126,9 @@ static void test(void)
   sc = rtems_task_set_scheduler(task_id, scheduler_b_id);
   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
 
+  sc = rtems_task_set_scheduler(task_id, scheduler_b_id + 1);
+  rtems_test_assert(sc == RTEMS_INVALID_ID);
+
   sc = rtems_task_get_scheduler(task_id, &scheduler_id);
   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
   rtems_test_assert(scheduler_id == scheduler_b_id);
@@ -191,11 +198,13 @@ static void Init(rtems_task_argument arg)
 
 #define CONFIGURE_SMP_APPLICATION
 
-#define CONFIGURE_SMP_MAXIMUM_PROCESSORS CPU_COUNT
+/* Lets see when the first RTEMS system hits this limit */
+#define CONFIGURE_SMP_MAXIMUM_PROCESSORS 64
 
 #define CONFIGURE_MAXIMUM_PRIORITY 255
 
 #define CONFIGURE_SCHEDULER_PRIORITY_SMP
+#define CONFIGURE_SCHEDULER_SIMPLE_SMP
 
 #include <rtems/scheduler.h>
 
@@ -203,15 +212,50 @@ RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(a, CONFIGURE_MAXIMUM_PRIORITY + 1);
 
 RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(b, CONFIGURE_MAXIMUM_PRIORITY + 1);
 
+RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP(c);
+
 #define CONFIGURE_SCHEDULER_CONTROLS \
   RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP(a, SCHED_A), \
-  RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP(b, SCHED_B)
+  RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP(b, SCHED_B), \
+  RTEMS_SCHEDULER_CONTROL_SIMPLE_SMP(c, SCHED_C)
 
 #define CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS \
   RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
-  RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY)
+  RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+  RTEMS_SCHEDULER_ASSIGN(2, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
 
-#define CONFIGURE_MAXIMUM_TASKS CPU_COUNT
+#define CONFIGURE_MAXIMUM_TASKS 2
 
 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
 
-- 
1.7.7




More information about the devel mailing list