Index: cpukit/rtems/include/rtems/rtems/tasks.h
===================================================================
--- cpukit/rtems/include/rtems/rtems/tasks.h	(revision d20b029af9b09bedb637f05770aa1497d79bbf08)
+++ cpukit/rtems/include/rtems/rtems/tasks.h	(revision e239760f6a6a5e31331487548d56c4a7581ed7cc)
@@ -598,4 +598,6 @@
  * @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(
Index: cpukit/rtems/src/schedulerident.c
===================================================================
--- cpukit/rtems/src/schedulerident.c	(revision d20b029af9b09bedb637f05770aa1497d79bbf08)
+++ cpukit/rtems/src/schedulerident.c	(revision e239760f6a6a5e31331487548d56c4a7581ed7cc)
@@ -34,7 +34,13 @@
 
     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;
+        }
       }
     }
Index: cpukit/score/include/rtems/score/schedulerimpl.h
===================================================================
--- cpukit/score/include/rtems/score/schedulerimpl.h	(revision d20b029af9b09bedb637f05770aa1497d79bbf08)
+++ cpukit/score/include/rtems/score/schedulerimpl.h	(revision e239760f6a6a5e31331487548d56c4a7581ed7cc)
@@ -572,4 +572,17 @@
 }
 
+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 )
 {
@@ -584,13 +597,15 @@
 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;
-
-  *scheduler = &_Scheduler_Table[ index ];
-
-  return index < _Scheduler_Count;
+  const Scheduler_Control *scheduler = &_Scheduler_Table[ index ];
+
+  *scheduler_p = scheduler;
+
+  return index < _Scheduler_Count
+    && _Scheduler_Get_processor_count( scheduler ) > 0;
 }
 
Index: cpukit/score/include/rtems/score/smpimpl.h
===================================================================
--- cpukit/score/include/rtems/score/smpimpl.h	(revision d20b029af9b09bedb637f05770aa1497d79bbf08)
+++ cpukit/score/include/rtems/score/smpimpl.h	(revision e239760f6a6a5e31331487548d56c4a7581ed7cc)
@@ -53,5 +53,4 @@
   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;
Index: cpukit/score/src/smp.c
===================================================================
--- cpukit/score/src/smp.c	(revision d20b029af9b09bedb637f05770aa1497d79bbf08)
+++ cpukit/score/src/smp.c	(revision e239760f6a6a5e31331487548d56c4a7581ed7cc)
@@ -25,18 +25,4 @@
 #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 )
@@ -76,6 +62,4 @@
     }
   }
-
-  _SMP_Check_scheduler_configuration();
 }
 
Index: doc/user/conf.t
===================================================================
--- doc/user/conf.t	(revision d20b029af9b09bedb637f05770aa1497d79bbf08)
+++ doc/user/conf.t	(revision e239760f6a6a5e31331487548d56c4a7581ed7cc)
@@ -3932,6 +3932,4 @@
 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.
-@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.
Index: doc/user/smp.t
===================================================================
--- doc/user/smp.t	(revision d20b029af9b09bedb637f05770aa1497d79bbf08)
+++ doc/user/smp.t	(revision e239760f6a6a5e31331487548d56c4a7581ed7cc)
@@ -447,5 +447,7 @@
 @code{@value{RPREFIX}SUCCESSFUL} - successful operation@*
 @code{@value{RPREFIX}INVALID_ADDRESS} - @code{id} is NULL@*
-@code{@value{RPREFIX}INVALID_NAME} - invalid scheduler name
+@code{@value{RPREFIX}INVALID_NAME} - invalid scheduler name@*
+@code{@value{RPREFIX}UNSATISFIED} - - a scheduler with this name exists, but
+the processor set of this scheduler is empty
 
 @subheading DESCRIPTION:
Index: testsuites/smptests/Makefile.am
===================================================================
--- testsuites/smptests/Makefile.am	(revision d20b029af9b09bedb637f05770aa1497d79bbf08)
+++ testsuites/smptests/Makefile.am	(revision e239760f6a6a5e31331487548d56c4a7581ed7cc)
@@ -17,5 +17,4 @@
 SUBDIRS += smpfatal04
 SUBDIRS += smpfatal05
-SUBDIRS += smpfatal06
 SUBDIRS += smpfatal07
 SUBDIRS += smpfatal08
Index: testsuites/smptests/configure.ac
===================================================================
--- testsuites/smptests/configure.ac	(revision d20b029af9b09bedb637f05770aa1497d79bbf08)
+++ testsuites/smptests/configure.ac	(revision e239760f6a6a5e31331487548d56c4a7581ed7cc)
@@ -72,5 +72,4 @@
 smpfatal04/Makefile
 smpfatal05/Makefile
-smpfatal06/Makefile
 smpfatal07/Makefile
 smpfatal08/Makefile
Index: stsuites/smptests/smpfatal06/Makefile.am
===================================================================
--- testsuites/smptests/smpfatal06/Makefile.am	(revision d20b029af9b09bedb637f05770aa1497d79bbf08)
+++ 	(revision )
@@ -1,19 +1,0 @@
-rtems_tests_PROGRAMS = smpfatal06
-smpfatal06_SOURCES = init.c
-
-dist_rtems_tests_DATA = smpfatal06.scn smpfatal06.doc
-
-include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.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
Index: stsuites/smptests/smpfatal06/init.c
===================================================================
--- testsuites/smptests/smpfatal06/init.c	(revision d20b029af9b09bedb637f05770aa1497d79bbf08)
+++ 	(revision )
@@ -1,81 +1,0 @@
-/*
- * Copyright (c) 2014 embedded brains GmbH.  All rights reserved.
- *
- *  embedded brains GmbH
- *  Dornierstr. 4
- *  82178 Puchheim
- *  Germany
- *  <rtems@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>
Index: stsuites/smptests/smpfatal06/smpfatal06.scn
===================================================================
--- testsuites/smptests/smpfatal06/smpfatal06.scn	(revision d20b029af9b09bedb637f05770aa1497d79bbf08)
+++ 	(revision )
@@ -1,2 +1,0 @@
-*** TEST SMPFATAL 6 ***
-*** END OF TEST SMPFATAL 6 ***
Index: testsuites/smptests/smpscheduler02/init.c
===================================================================
--- testsuites/smptests/smpscheduler02/init.c	(revision d20b029af9b09bedb637f05770aa1497d79bbf08)
+++ testsuites/smptests/smpscheduler02/init.c	(revision e239760f6a6a5e31331487548d56c4a7581ed7cc)
@@ -26,9 +26,9 @@
 #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;
@@ -57,4 +57,5 @@
   rtems_id scheduler_a_id;
   rtems_id scheduler_b_id;
+  rtems_id scheduler_c_id;
   cpu_set_t cpuset;
   cpu_set_t first_cpu;
@@ -82,4 +83,7 @@
   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);
@@ -123,4 +127,7 @@
   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);
@@ -192,9 +199,11 @@
 #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,14 +212,49 @@
 
 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)
-
-#define CONFIGURE_MAXIMUM_TASKS CPU_COUNT
+  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 2
 
 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
