Index: cpukit/score/include/rtems/score/scheduler.h
===================================================================
--- cpukit/score/include/rtems/score/scheduler.h	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/include/rtems/score/scheduler.h	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -44,11 +44,11 @@
 
 #if defined(RTEMS_SMP)
-  typedef Thread_Control * Scheduler_Void_or_thread;
-
-  #define SCHEDULER_RETURN_VOID_OR_NULL return NULL
+  typedef bool Scheduler_Void_or_bool;
+
+  #define SCHEDULER_RETURN_VOID_OR_BOOL return false
 #else
-  typedef void Scheduler_Void_or_thread;
-
-  #define SCHEDULER_RETURN_VOID_OR_NULL return
+  typedef void Scheduler_Void_or_bool;
+
+  #define SCHEDULER_RETURN_VOID_OR_BOOL return
 #endif
 
@@ -64,5 +64,5 @@
 
   /** @see _Scheduler_Yield() */
-  Scheduler_Void_or_thread ( *yield )(
+  Scheduler_Void_or_bool ( *yield )(
     const Scheduler_Control *,
     Thread_Control *,
@@ -78,5 +78,5 @@
 
   /** @see _Scheduler_Unblock() */
-  Scheduler_Void_or_thread ( *unblock )(
+  Scheduler_Void_or_bool ( *unblock )(
     const Scheduler_Control *,
     Thread_Control *,
Index: cpukit/score/include/rtems/score/schedulercbs.h
===================================================================
--- cpukit/score/include/rtems/score/schedulercbs.h	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/include/rtems/score/schedulercbs.h	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -147,5 +147,5 @@
 extern Scheduler_CBS_Server _Scheduler_CBS_Server_list[];
 
-Scheduler_Void_or_thread _Scheduler_CBS_Unblock(
+Scheduler_Void_or_bool _Scheduler_CBS_Unblock(
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
Index: cpukit/score/include/rtems/score/scheduleredf.h
===================================================================
--- cpukit/score/include/rtems/score/scheduleredf.h	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/include/rtems/score/scheduleredf.h	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -145,5 +145,5 @@
 );
 
-Scheduler_Void_or_thread _Scheduler_EDF_Unblock(
+Scheduler_Void_or_bool _Scheduler_EDF_Unblock(
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
@@ -167,5 +167,5 @@
 );
 
-Scheduler_Void_or_thread _Scheduler_EDF_Yield(
+Scheduler_Void_or_bool _Scheduler_EDF_Yield(
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
Index: cpukit/score/include/rtems/score/schedulerimpl.h
===================================================================
--- cpukit/score/include/rtems/score/schedulerimpl.h	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/include/rtems/score/schedulerimpl.h	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -176,5 +176,5 @@
   const Scheduler_Control *scheduler;
   ISR_lock_Context         lock_context;
-  Thread_Control          *needs_help;
+  bool                     needs_help;
 
   node = _Chain_First( &the_thread->Scheduler.Scheduler_nodes );
@@ -192,5 +192,5 @@
   _Scheduler_Release_critical( scheduler, &lock_context );
 
-  if ( needs_help != the_thread ) {
+  if ( !needs_help ) {
     return;
   }
@@ -310,5 +310,5 @@
   const Scheduler_Control *scheduler;
   ISR_lock_Context         lock_context;
-  Thread_Control          *needs_help;
+  bool                     needs_help;
 
   node = _Chain_First( &the_thread->Scheduler.Scheduler_nodes );
@@ -326,5 +326,5 @@
   _Scheduler_Release_critical( scheduler, &lock_context );
 
-  if ( needs_help != the_thread ) {
+  if ( !needs_help ) {
     return;
   }
Index: cpukit/score/include/rtems/score/schedulerpriority.h
===================================================================
--- cpukit/score/include/rtems/score/schedulerpriority.h	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/include/rtems/score/schedulerpriority.h	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -129,5 +129,5 @@
 );
 
-Scheduler_Void_or_thread _Scheduler_priority_Unblock(
+Scheduler_Void_or_bool _Scheduler_priority_Unblock(
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
@@ -148,5 +148,5 @@
 );
 
-Scheduler_Void_or_thread _Scheduler_priority_Yield(
+Scheduler_Void_or_bool _Scheduler_priority_Yield(
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
Index: cpukit/score/include/rtems/score/schedulerpriorityaffinitysmp.h
===================================================================
--- cpukit/score/include/rtems/score/schedulerpriorityaffinitysmp.h	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/include/rtems/score/schedulerpriorityaffinitysmp.h	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -95,5 +95,5 @@
 );
 
-Thread_Control *_Scheduler_priority_affinity_SMP_Unblock(
+bool _Scheduler_priority_affinity_SMP_Unblock(
   const Scheduler_Control *scheduler,
   Thread_Control          *thread,
Index: cpukit/score/include/rtems/score/schedulerprioritysmp.h
===================================================================
--- cpukit/score/include/rtems/score/schedulerprioritysmp.h	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/include/rtems/score/schedulerprioritysmp.h	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -114,5 +114,5 @@
 );
 
-Thread_Control *_Scheduler_priority_SMP_Unblock(
+bool _Scheduler_priority_SMP_Unblock(
   const Scheduler_Control *scheduler,
   Thread_Control          *thread,
@@ -145,5 +145,5 @@
 );
 
-Thread_Control *_Scheduler_priority_SMP_Yield(
+bool _Scheduler_priority_SMP_Yield(
   const Scheduler_Control *scheduler,
   Thread_Control          *thread,
Index: cpukit/score/include/rtems/score/schedulersimple.h
===================================================================
--- cpukit/score/include/rtems/score/schedulersimple.h	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/include/rtems/score/schedulersimple.h	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -93,5 +93,5 @@
 );
 
-Scheduler_Void_or_thread _Scheduler_simple_Yield(
+Scheduler_Void_or_bool _Scheduler_simple_Yield(
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
@@ -105,5 +105,5 @@
 );
 
-Scheduler_Void_or_thread _Scheduler_simple_Unblock(
+Scheduler_Void_or_bool _Scheduler_simple_Unblock(
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
Index: cpukit/score/include/rtems/score/schedulersimplesmp.h
===================================================================
--- cpukit/score/include/rtems/score/schedulersimplesmp.h	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/include/rtems/score/schedulersimplesmp.h	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -97,5 +97,5 @@
 );
 
-Thread_Control *_Scheduler_simple_SMP_Unblock(
+bool _Scheduler_simple_SMP_Unblock(
   const Scheduler_Control *scheduler,
   Thread_Control          *thread,
@@ -128,5 +128,5 @@
 );
 
-Thread_Control *_Scheduler_simple_SMP_Yield(
+bool _Scheduler_simple_SMP_Yield(
   const Scheduler_Control *scheduler,
   Thread_Control          *thread,
Index: cpukit/score/include/rtems/score/schedulersmpimpl.h
===================================================================
--- cpukit/score/include/rtems/score/schedulersmpimpl.h	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/include/rtems/score/schedulersmpimpl.h	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -314,11 +314,5 @@
 );
 
-typedef Thread_Control *( *Scheduler_SMP_Enqueue )(
-  Scheduler_Context *context,
-  Scheduler_Node    *node_to_enqueue,
-  Thread_Control    *needs_help
-);
-
-typedef Thread_Control *( *Scheduler_SMP_Enqueue_scheduled )(
+typedef bool ( *Scheduler_SMP_Enqueue )(
   Scheduler_Context *context,
   Scheduler_Node    *node_to_enqueue
@@ -618,5 +612,5 @@
 }
 
-static inline Thread_Control *_Scheduler_SMP_Enqueue_to_scheduled(
+static inline void _Scheduler_SMP_Enqueue_to_scheduled(
   Scheduler_Context                *context,
   Scheduler_Node                   *node,
@@ -627,5 +621,4 @@
 )
 {
-  Thread_Control *needs_help;
   Scheduler_Try_to_schedule_action action;
 
@@ -638,8 +631,5 @@
 
   if ( action == SCHEDULER_TRY_TO_SCHEDULE_DO_SCHEDULE ) {
-    Thread_Control *lowest_scheduled_user;
-    Thread_Control *idle;
-
-    lowest_scheduled_user = _Scheduler_SMP_Preempt(
+    _Scheduler_SMP_Preempt(
       context,
       node,
@@ -651,14 +641,9 @@
     ( *move_from_scheduled_to_ready )( context, lowest_scheduled );
 
-    idle = _Scheduler_Release_idle_thread(
+    _Scheduler_Release_idle_thread(
       context,
       lowest_scheduled,
       _Scheduler_SMP_Release_idle_thread
     );
-    if ( idle == NULL ) {
-      needs_help = lowest_scheduled_user;
-    } else {
-      needs_help = NULL;
-    }
   } else if ( action == SCHEDULER_TRY_TO_SCHEDULE_DO_IDLE_EXCHANGE ) {
     _Scheduler_SMP_Node_change_state(
@@ -676,13 +661,8 @@
       _Scheduler_Node_get_idle( lowest_scheduled )
     );
-
-    needs_help = NULL;
   } else {
     _Assert( action == SCHEDULER_TRY_TO_SCHEDULE_DO_BLOCK );
     _Scheduler_SMP_Node_change_state( node, SCHEDULER_SMP_NODE_BLOCKED );
-    needs_help = NULL;
-  }
-
-  return needs_help;
+  }
 }
 
@@ -694,6 +674,4 @@
  * @param[in] context The scheduler instance context.
  * @param[in] node The node to enqueue.
- * @param[in] needs_help The thread needing help in case the node cannot be
- *   scheduled.
  * @param[in] order The order function.
  * @param[in] insert_ready Function to insert a node into the set of ready
@@ -710,8 +688,7 @@
  *   based on the rules of the scheduler.
  */
-static inline Thread_Control *_Scheduler_SMP_Enqueue_ordered(
+static inline bool _Scheduler_SMP_Enqueue_ordered(
   Scheduler_Context                  *context,
   Scheduler_Node                     *node,
-  Thread_Control                     *needs_help,
   Chain_Node_order                    order,
   Scheduler_SMP_Insert                insert_ready,
@@ -722,9 +699,11 @@
 )
 {
-  Scheduler_Node *lowest_scheduled =
-    ( *get_lowest_scheduled )( context, node, order );
+  bool            needs_help;
+  Scheduler_Node *lowest_scheduled;
+
+  lowest_scheduled = ( *get_lowest_scheduled )( context, node, order );
 
   if ( ( *order )( &node->Node, &lowest_scheduled->Node ) ) {
-    needs_help = _Scheduler_SMP_Enqueue_to_scheduled(
+    _Scheduler_SMP_Enqueue_to_scheduled(
       context,
       node,
@@ -734,6 +713,8 @@
       allocate_processor
     );
+    needs_help = false;
   } else {
     ( *insert_ready )( context, node );
+    needs_help = true;
   }
 
@@ -760,5 +741,5 @@
  *   based on the rules of the scheduler.
  */
-static inline Thread_Control *_Scheduler_SMP_Enqueue_scheduled_ordered(
+static inline bool _Scheduler_SMP_Enqueue_scheduled_ordered(
   Scheduler_Context                *context,
   Scheduler_Node                   *node,
@@ -812,5 +793,5 @@
       }
 
-      return NULL;
+      return false;
     }
 
@@ -823,8 +804,7 @@
 
     if ( action == SCHEDULER_TRY_TO_SCHEDULE_DO_SCHEDULE ) {
-      Thread_Control *user;
       Thread_Control *idle;
 
-      user = _Scheduler_SMP_Preempt(
+      _Scheduler_SMP_Preempt(
         context,
         highest_ready,
@@ -841,10 +821,5 @@
         _Scheduler_SMP_Release_idle_thread
       );
-
-      if ( idle == NULL ) {
-        return user;
-      } else {
-        return NULL;
-      }
+      return ( idle == NULL );
     } else if ( action == SCHEDULER_TRY_TO_SCHEDULE_DO_IDLE_EXCHANGE ) {
       _Scheduler_SMP_Node_change_state( node, SCHEDULER_SMP_NODE_READY );
@@ -862,5 +837,5 @@
         _Scheduler_Node_get_idle( node )
       );
-      return NULL;
+      return false;
     } else {
       _Assert( action == SCHEDULER_TRY_TO_SCHEDULE_DO_BLOCK );
@@ -983,5 +958,5 @@
 }
 
-static inline Thread_Control *_Scheduler_SMP_Unblock(
+static inline bool _Scheduler_SMP_Unblock(
   Scheduler_Context     *context,
   Thread_Control        *thread,
@@ -993,5 +968,5 @@
   Scheduler_SMP_Node_state  node_state;
   bool                      unblock;
-  Thread_Control           *needs_help;
+  bool                      needs_help;
 
   node_state = _Scheduler_SMP_Node_state( node );
@@ -1018,13 +993,13 @@
       _Scheduler_SMP_Node_change_state( node, SCHEDULER_SMP_NODE_READY );
 
-      needs_help = ( *enqueue_fifo )( context, node, thread );
+      needs_help = ( *enqueue_fifo )( context, node );
     } else {
       _Assert( node_state == SCHEDULER_SMP_NODE_READY );
       _Assert( node->sticky_level > 0 );
       _Assert( node->idle == NULL );
-      needs_help = thread;
+      needs_help = true;
     }
   } else {
-    needs_help = NULL;
+    needs_help = false;
   }
 
@@ -1033,14 +1008,14 @@
 
 static inline void _Scheduler_SMP_Update_priority(
-  Scheduler_Context               *context,
-  Thread_Control                  *thread,
-  Scheduler_Node                  *node,
-  Scheduler_SMP_Extract            extract_from_ready,
-  Scheduler_SMP_Update             update,
-  Scheduler_SMP_Enqueue            enqueue_fifo,
-  Scheduler_SMP_Enqueue            enqueue_lifo,
-  Scheduler_SMP_Enqueue_scheduled  enqueue_scheduled_fifo,
-  Scheduler_SMP_Enqueue_scheduled  enqueue_scheduled_lifo,
-  Scheduler_SMP_Ask_for_help       ask_for_help
+  Scheduler_Context          *context,
+  Thread_Control             *thread,
+  Scheduler_Node             *node,
+  Scheduler_SMP_Extract       extract_from_ready,
+  Scheduler_SMP_Update        update,
+  Scheduler_SMP_Enqueue       enqueue_fifo,
+  Scheduler_SMP_Enqueue       enqueue_lifo,
+  Scheduler_SMP_Enqueue       enqueue_scheduled_fifo,
+  Scheduler_SMP_Enqueue       enqueue_scheduled_lifo,
+  Scheduler_SMP_Ask_for_help  ask_for_help
 )
 {
@@ -1077,7 +1052,7 @@
 
     if ( prepend_it ) {
-      ( *enqueue_lifo )( context, node, NULL );
+      ( *enqueue_lifo )( context, node );
     } else {
-      ( *enqueue_fifo )( context, node, NULL );
+      ( *enqueue_fifo )( context, node );
     }
   } else {
@@ -1090,15 +1065,15 @@
 }
 
-static inline Thread_Control *_Scheduler_SMP_Yield(
-  Scheduler_Context               *context,
-  Thread_Control                  *thread,
-  Scheduler_Node                  *node,
-  Scheduler_SMP_Extract            extract_from_ready,
-  Scheduler_SMP_Enqueue            enqueue_fifo,
-  Scheduler_SMP_Enqueue_scheduled  enqueue_scheduled_fifo
-)
-{
-  Thread_Control           *needs_help;
-  Scheduler_SMP_Node_state  node_state;
+static inline bool _Scheduler_SMP_Yield(
+  Scheduler_Context     *context,
+  Thread_Control        *thread,
+  Scheduler_Node        *node,
+  Scheduler_SMP_Extract  extract_from_ready,
+  Scheduler_SMP_Enqueue  enqueue_fifo,
+  Scheduler_SMP_Enqueue  enqueue_scheduled_fifo
+)
+{
+  bool                     needs_help;
+  Scheduler_SMP_Node_state node_state;
 
   node_state = _Scheduler_SMP_Node_state( node );
@@ -1111,7 +1086,7 @@
     ( *extract_from_ready )( context, node );
 
-    needs_help = ( *enqueue_fifo )( context, node, NULL );
+    needs_help = ( *enqueue_fifo )( context, node );
   } else {
-    needs_help = thread;
+    needs_help = true;
   }
 
Index: cpukit/score/include/rtems/score/schedulerstrongapa.h
===================================================================
--- cpukit/score/include/rtems/score/schedulerstrongapa.h	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/include/rtems/score/schedulerstrongapa.h	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -114,5 +114,5 @@
 );
 
-Thread_Control *_Scheduler_strong_APA_Unblock(
+bool _Scheduler_strong_APA_Unblock(
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
@@ -145,5 +145,5 @@
 );
 
-Thread_Control *_Scheduler_strong_APA_Yield(
+bool _Scheduler_strong_APA_Yield(
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
Index: cpukit/score/src/schedulercbsunblock.c
===================================================================
--- cpukit/score/src/schedulercbsunblock.c	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/src/schedulercbsunblock.c	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -26,5 +26,5 @@
 #include <rtems/score/watchdogimpl.h>
 
-Scheduler_Void_or_thread _Scheduler_CBS_Unblock(
+Scheduler_Void_or_bool _Scheduler_CBS_Unblock(
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
@@ -69,4 +69,4 @@
 
   _Scheduler_EDF_Unblock( scheduler, the_thread, &the_node->Base.Base );
-  SCHEDULER_RETURN_VOID_OR_NULL;
+  SCHEDULER_RETURN_VOID_OR_BOOL;
 }
Index: cpukit/score/src/scheduleredfunblock.c
===================================================================
--- cpukit/score/src/scheduleredfunblock.c	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/src/scheduleredfunblock.c	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -23,5 +23,5 @@
 #include <rtems/score/thread.h>
 
-Scheduler_Void_or_thread _Scheduler_EDF_Unblock(
+Scheduler_Void_or_bool _Scheduler_EDF_Unblock(
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
@@ -61,4 +61,4 @@
   }
 
-  SCHEDULER_RETURN_VOID_OR_NULL;
+  SCHEDULER_RETURN_VOID_OR_BOOL;
 }
Index: cpukit/score/src/scheduleredfyield.c
===================================================================
--- cpukit/score/src/scheduleredfyield.c	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/src/scheduleredfyield.c	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -22,5 +22,5 @@
 #include <rtems/score/scheduleredfimpl.h>
 
-Scheduler_Void_or_thread _Scheduler_EDF_Yield(
+Scheduler_Void_or_bool _Scheduler_EDF_Yield(
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
@@ -38,4 +38,4 @@
   _Scheduler_EDF_Schedule_body( scheduler, the_thread, true );
 
-  SCHEDULER_RETURN_VOID_OR_NULL;
+  SCHEDULER_RETURN_VOID_OR_BOOL;
 }
Index: cpukit/score/src/schedulerpriorityaffinitysmp.c
===================================================================
--- cpukit/score/src/schedulerpriorityaffinitysmp.c	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/src/schedulerpriorityaffinitysmp.c	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -271,8 +271,7 @@
  * _Scheduler_SMP_Enqueue_ordered.
  */
-static Thread_Control *_Scheduler_priority_affinity_SMP_Enqueue_fifo(
+static bool _Scheduler_priority_affinity_SMP_Enqueue_fifo(
   Scheduler_Context *context,
-  Scheduler_Node    *node,
-  Thread_Control    *needs_help
+  Scheduler_Node    *node
 )
 {
@@ -280,5 +279,4 @@
     context,
     node,
-    needs_help,
     _Scheduler_priority_affinity_SMP_Insert_priority_fifo_order,
     _Scheduler_priority_SMP_Insert_ready_fifo,
@@ -355,5 +353,5 @@
  * This is the public scheduler specific Unblock operation.
  */
-Thread_Control *_Scheduler_priority_affinity_SMP_Unblock(
+bool _Scheduler_priority_affinity_SMP_Unblock(
   const Scheduler_Control *scheduler,
   Thread_Control          *thread,
@@ -362,5 +360,5 @@
 {
   Scheduler_Context *context = _Scheduler_Get_context( scheduler );
-  Thread_Control    *needs_help;
+  bool               needs_help;
 
   needs_help = _Scheduler_SMP_Unblock(
@@ -384,8 +382,7 @@
  *  get_lowest_scheduled helper to _Scheduler_SMP_Enqueue_ordered.
  */
-static Thread_Control *_Scheduler_priority_affinity_SMP_Enqueue_ordered(
+static bool _Scheduler_priority_affinity_SMP_Enqueue_ordered(
   Scheduler_Context     *context,
   Scheduler_Node        *node,
-  Thread_Control        *needs_help,
   Chain_Node_order       order,
   Scheduler_SMP_Insert   insert_ready,
@@ -396,5 +393,4 @@
     context,
     node,
-    needs_help,
     order,
     insert_ready,
@@ -411,8 +407,7 @@
  *  invokes a scheduler unique get_lowest_scheduled helper.
  */
-static Thread_Control *_Scheduler_priority_affinity_SMP_Enqueue_lifo(
+static bool _Scheduler_priority_affinity_SMP_Enqueue_lifo(
   Scheduler_Context *context,
-  Scheduler_Node    *node,
-  Thread_Control    *needs_help
+  Scheduler_Node    *node
 )
 {
@@ -420,5 +415,4 @@
     context,
     node,
-    needs_help,
     _Scheduler_priority_affinity_SMP_Insert_priority_lifo_order,
     _Scheduler_priority_SMP_Insert_ready_lifo,
@@ -432,6 +426,5 @@
  * this scheduler's get_highest_ready() helper.
  */
-static Thread_Control *
-_Scheduler_priority_affinity_SMP_Enqueue_scheduled_ordered(
+static bool _Scheduler_priority_affinity_SMP_Enqueue_scheduled_ordered(
   Scheduler_Context    *context,
   Scheduler_Node       *node,
@@ -459,5 +452,5 @@
  *  invokes a scheduler unique get_lowest_scheduled helper.
  */
-static Thread_Control *_Scheduler_priority_affinity_SMP_Enqueue_scheduled_lifo(
+static bool _Scheduler_priority_affinity_SMP_Enqueue_scheduled_lifo(
   Scheduler_Context *context,
   Scheduler_Node    *node
@@ -478,5 +471,5 @@
  *  invokes a scheduler unique get_lowest_scheduled helper.
  */
-static Thread_Control *_Scheduler_priority_affinity_SMP_Enqueue_scheduled_fifo(
+static bool _Scheduler_priority_affinity_SMP_Enqueue_scheduled_fifo(
   Scheduler_Context *context,
   Scheduler_Node    *node
Index: cpukit/score/src/schedulerprioritysmp.c
===================================================================
--- cpukit/score/src/schedulerprioritysmp.c	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/src/schedulerprioritysmp.c	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -110,8 +110,7 @@
 }
 
-static Thread_Control *_Scheduler_priority_SMP_Enqueue_ordered(
+static bool _Scheduler_priority_SMP_Enqueue_ordered(
   Scheduler_Context    *context,
   Scheduler_Node       *node,
-  Thread_Control       *needs_help,
   Chain_Node_order      order,
   Scheduler_SMP_Insert  insert_ready,
@@ -122,5 +121,4 @@
     context,
     node,
-    needs_help,
     order,
     insert_ready,
@@ -132,8 +130,7 @@
 }
 
-static Thread_Control *_Scheduler_priority_SMP_Enqueue_lifo(
-  Scheduler_Context *context,
-  Scheduler_Node    *node,
-  Thread_Control    *needs_help
+static bool _Scheduler_priority_SMP_Enqueue_lifo(
+  Scheduler_Context *context,
+  Scheduler_Node    *node
 )
 {
@@ -141,5 +138,4 @@
     context,
     node,
-    needs_help,
     _Scheduler_SMP_Insert_priority_lifo_order,
     _Scheduler_priority_SMP_Insert_ready_lifo,
@@ -148,8 +144,7 @@
 }
 
-static Thread_Control *_Scheduler_priority_SMP_Enqueue_fifo(
-  Scheduler_Context *context,
-  Scheduler_Node    *node,
-  Thread_Control    *needs_help
+static bool _Scheduler_priority_SMP_Enqueue_fifo(
+  Scheduler_Context *context,
+  Scheduler_Node    *node
 )
 {
@@ -157,5 +152,4 @@
     context,
     node,
-    needs_help,
     _Scheduler_SMP_Insert_priority_fifo_order,
     _Scheduler_priority_SMP_Insert_ready_fifo,
@@ -164,5 +158,5 @@
 }
 
-static Thread_Control *_Scheduler_priority_SMP_Enqueue_scheduled_ordered(
+static bool _Scheduler_priority_SMP_Enqueue_scheduled_ordered(
   Scheduler_Context *context,
   Scheduler_Node *node,
@@ -185,5 +179,5 @@
 }
 
-static Thread_Control *_Scheduler_priority_SMP_Enqueue_scheduled_lifo(
+static bool _Scheduler_priority_SMP_Enqueue_scheduled_lifo(
   Scheduler_Context *context,
   Scheduler_Node *node
@@ -199,5 +193,5 @@
 }
 
-static Thread_Control *_Scheduler_priority_SMP_Enqueue_scheduled_fifo(
+static bool _Scheduler_priority_SMP_Enqueue_scheduled_fifo(
   Scheduler_Context *context,
   Scheduler_Node *node
@@ -213,5 +207,5 @@
 }
 
-Thread_Control *_Scheduler_priority_SMP_Unblock(
+bool _Scheduler_priority_SMP_Unblock(
   const Scheduler_Control *scheduler,
   Thread_Control          *thread,
@@ -319,5 +313,5 @@
 }
 
-Thread_Control *_Scheduler_priority_SMP_Yield(
+bool _Scheduler_priority_SMP_Yield(
   const Scheduler_Control *scheduler,
   Thread_Control          *thread,
Index: cpukit/score/src/schedulerpriorityunblock.c
===================================================================
--- cpukit/score/src/schedulerpriorityunblock.c	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/src/schedulerpriorityunblock.c	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -23,5 +23,5 @@
 #include <rtems/score/schedulerpriorityimpl.h>
 
-Scheduler_Void_or_thread _Scheduler_priority_Unblock (
+Scheduler_Void_or_bool _Scheduler_priority_Unblock (
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
@@ -73,4 +73,4 @@
   }
 
-  SCHEDULER_RETURN_VOID_OR_NULL;
+  SCHEDULER_RETURN_VOID_OR_BOOL;
 }
Index: cpukit/score/src/schedulerpriorityyield.c
===================================================================
--- cpukit/score/src/schedulerpriorityyield.c	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/src/schedulerpriorityyield.c	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -22,5 +22,5 @@
 #include <rtems/score/threadimpl.h>
 
-Scheduler_Void_or_thread _Scheduler_priority_Yield(
+Scheduler_Void_or_bool _Scheduler_priority_Yield(
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
@@ -41,4 +41,4 @@
   _Scheduler_priority_Schedule_body( scheduler, the_thread, true );
 
-  SCHEDULER_RETURN_VOID_OR_NULL;
+  SCHEDULER_RETURN_VOID_OR_BOOL;
 }
Index: cpukit/score/src/schedulersimplesmp.c
===================================================================
--- cpukit/score/src/schedulersimplesmp.c	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/src/schedulersimplesmp.c	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -177,8 +177,7 @@
 }
 
-static Thread_Control *_Scheduler_simple_SMP_Enqueue_ordered(
+static bool _Scheduler_simple_SMP_Enqueue_ordered(
   Scheduler_Context    *context,
   Scheduler_Node       *node,
-  Thread_Control       *needs_help,
   Chain_Node_order      order,
   Scheduler_SMP_Insert  insert_ready,
@@ -189,5 +188,4 @@
     context,
     node,
-    needs_help,
     order,
     insert_ready,
@@ -199,8 +197,7 @@
 }
 
-static Thread_Control *_Scheduler_simple_SMP_Enqueue_lifo(
-  Scheduler_Context *context,
-  Scheduler_Node    *node,
-  Thread_Control    *needs_help
+static bool _Scheduler_simple_SMP_Enqueue_lifo(
+  Scheduler_Context *context,
+  Scheduler_Node    *node
 )
 {
@@ -208,5 +205,4 @@
     context,
     node,
-    needs_help,
     _Scheduler_SMP_Insert_priority_lifo_order,
     _Scheduler_simple_SMP_Insert_ready_lifo,
@@ -215,8 +211,7 @@
 }
 
-static Thread_Control *_Scheduler_simple_SMP_Enqueue_fifo(
-  Scheduler_Context *context,
-  Scheduler_Node    *node,
-  Thread_Control    *needs_help
+static bool _Scheduler_simple_SMP_Enqueue_fifo(
+  Scheduler_Context *context,
+  Scheduler_Node    *node
 )
 {
@@ -224,5 +219,4 @@
     context,
     node,
-    needs_help,
     _Scheduler_SMP_Insert_priority_fifo_order,
     _Scheduler_simple_SMP_Insert_ready_fifo,
@@ -231,5 +225,5 @@
 }
 
-static Thread_Control *_Scheduler_simple_SMP_Enqueue_scheduled_ordered(
+static bool _Scheduler_simple_SMP_Enqueue_scheduled_ordered(
   Scheduler_Context *context,
   Scheduler_Node *node,
@@ -252,5 +246,5 @@
 }
 
-static Thread_Control *_Scheduler_simple_SMP_Enqueue_scheduled_lifo(
+static bool _Scheduler_simple_SMP_Enqueue_scheduled_lifo(
   Scheduler_Context *context,
   Scheduler_Node *node
@@ -266,5 +260,5 @@
 }
 
-static Thread_Control *_Scheduler_simple_SMP_Enqueue_scheduled_fifo(
+static bool _Scheduler_simple_SMP_Enqueue_scheduled_fifo(
   Scheduler_Context *context,
   Scheduler_Node *node
@@ -280,5 +274,5 @@
 }
 
-Thread_Control *_Scheduler_simple_SMP_Unblock(
+bool _Scheduler_simple_SMP_Unblock(
   const Scheduler_Control *scheduler,
   Thread_Control          *thread,
@@ -386,5 +380,5 @@
 }
 
-Thread_Control *_Scheduler_simple_SMP_Yield(
+bool _Scheduler_simple_SMP_Yield(
   const Scheduler_Control *scheduler,
   Thread_Control          *thread,
Index: cpukit/score/src/schedulersimpleunblock.c
===================================================================
--- cpukit/score/src/schedulersimpleunblock.c	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/src/schedulersimpleunblock.c	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -22,5 +22,5 @@
 #include <rtems/score/thread.h>
 
-Scheduler_Void_or_thread _Scheduler_simple_Unblock(
+Scheduler_Void_or_bool _Scheduler_simple_Unblock(
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
@@ -56,4 +56,4 @@
   }
 
-  SCHEDULER_RETURN_VOID_OR_NULL;
+  SCHEDULER_RETURN_VOID_OR_BOOL;
 }
Index: cpukit/score/src/schedulersimpleyield.c
===================================================================
--- cpukit/score/src/schedulersimpleyield.c	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/src/schedulersimpleyield.c	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -21,5 +21,5 @@
 #include <rtems/score/schedulersimpleimpl.h>
 
-Scheduler_Void_or_thread _Scheduler_simple_Yield(
+Scheduler_Void_or_bool _Scheduler_simple_Yield(
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
@@ -36,4 +36,4 @@
   _Scheduler_simple_Schedule_body( scheduler, the_thread, false );
 
-  SCHEDULER_RETURN_VOID_OR_NULL;
+  SCHEDULER_RETURN_VOID_OR_BOOL;
 }
Index: cpukit/score/src/schedulerstrongapa.c
===================================================================
--- cpukit/score/src/schedulerstrongapa.c	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ cpukit/score/src/schedulerstrongapa.c	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -236,8 +236,7 @@
 }
 
-static Thread_Control *_Scheduler_strong_APA_Enqueue_ordered(
+static bool _Scheduler_strong_APA_Enqueue_ordered(
   Scheduler_Context    *context,
   Scheduler_Node       *node,
-  Thread_Control       *needs_help,
   Chain_Node_order      order,
   Scheduler_SMP_Insert  insert_ready,
@@ -248,5 +247,4 @@
     context,
     node,
-    needs_help,
     order,
     insert_ready,
@@ -258,8 +256,7 @@
 }
 
-static Thread_Control *_Scheduler_strong_APA_Enqueue_lifo(
-  Scheduler_Context *context,
-  Scheduler_Node    *node,
-  Thread_Control    *needs_help
+static bool _Scheduler_strong_APA_Enqueue_lifo(
+  Scheduler_Context *context,
+  Scheduler_Node    *node
 )
 {
@@ -267,5 +264,4 @@
     context,
     node,
-    needs_help,
     _Scheduler_SMP_Insert_priority_lifo_order,
     _Scheduler_strong_APA_Insert_ready_lifo,
@@ -274,8 +270,7 @@
 }
 
-static Thread_Control *_Scheduler_strong_APA_Enqueue_fifo(
-  Scheduler_Context *context,
-  Scheduler_Node    *node,
-  Thread_Control    *needs_help
+static bool _Scheduler_strong_APA_Enqueue_fifo(
+  Scheduler_Context *context,
+  Scheduler_Node    *node
 )
 {
@@ -283,5 +278,4 @@
     context,
     node,
-    needs_help,
     _Scheduler_SMP_Insert_priority_fifo_order,
     _Scheduler_strong_APA_Insert_ready_fifo,
@@ -290,5 +284,5 @@
 }
 
-static Thread_Control *_Scheduler_strong_APA_Enqueue_scheduled_ordered(
+static bool _Scheduler_strong_APA_Enqueue_scheduled_ordered(
   Scheduler_Context    *context,
   Scheduler_Node       *node,
@@ -311,5 +305,5 @@
 }
 
-static Thread_Control *_Scheduler_strong_APA_Enqueue_scheduled_lifo(
+static bool _Scheduler_strong_APA_Enqueue_scheduled_lifo(
   Scheduler_Context *context,
   Scheduler_Node    *node
@@ -325,5 +319,5 @@
 }
 
-static Thread_Control *_Scheduler_strong_APA_Enqueue_scheduled_fifo(
+static bool _Scheduler_strong_APA_Enqueue_scheduled_fifo(
   Scheduler_Context *context,
   Scheduler_Node    *node
@@ -339,5 +333,5 @@
 }
 
-Thread_Control *_Scheduler_strong_APA_Unblock(
+bool _Scheduler_strong_APA_Unblock(
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
@@ -445,5 +439,5 @@
 }
 
-Thread_Control *_Scheduler_strong_APA_Yield(
+bool _Scheduler_strong_APA_Yield(
   const Scheduler_Control *scheduler,
   Thread_Control          *the_thread,
Index: testsuites/smptests/smpscheduler03/init.c
===================================================================
--- testsuites/smptests/smpscheduler03/init.c	(revision 2dd098a6359d9df132da09201ea0506c5389dc80)
+++ testsuites/smptests/smpscheduler03/init.c	(revision 63e2ca1b8b0a651a733d4ac3e0517397d0681214)
@@ -315,5 +315,5 @@
 }
 
-static Thread_Control *yield_op(
+static bool yield_op(
   Thread_Control *thread,
   Scheduler_SMP_Node *scheduler_node
@@ -323,5 +323,5 @@
   ISR_lock_Context state_lock_context;
   ISR_lock_Context scheduler_lock_context;
-  Thread_Control *needs_help;
+  bool needs_help;
 
   _Thread_State_acquire( thread, &state_lock_context );
@@ -349,5 +349,5 @@
 )
 {
-  Thread_Control *needs_help;
+  bool needs_help;
   Per_CPU_Control *cpu_self;
 
@@ -396,18 +396,14 @@
   rtems_test_assert(executing_node->state == new_state);
 
-  if (start_state != new_state) {
-    switch (start_state) {
-      case SCHEDULER_SMP_NODE_SCHEDULED:
-        rtems_test_assert(needs_help == executing);
-        break;
-      case SCHEDULER_SMP_NODE_READY:
-        rtems_test_assert(needs_help == other);
-        break;
-      default:
-        rtems_test_assert(0);
-        break;
-    }
-  } else {
-    rtems_test_assert(needs_help == NULL);
+  switch (new_state) {
+    case SCHEDULER_SMP_NODE_SCHEDULED:
+      rtems_test_assert(!needs_help);
+      break;
+    case SCHEDULER_SMP_NODE_READY:
+      rtems_test_assert(needs_help);
+      break;
+    default:
+      rtems_test_assert(0);
+      break;
   }
 
@@ -474,5 +470,5 @@
 }
 
-static Thread_Control *unblock_op(
+static bool unblock_op(
   Thread_Control *thread,
   Scheduler_SMP_Node *scheduler_node
@@ -482,5 +478,5 @@
   ISR_lock_Context state_lock_context;
   ISR_lock_Context scheduler_lock_context;
-  Thread_Control *needs_help;
+  bool needs_help;
 
   _Thread_State_acquire( thread, &state_lock_context );
@@ -507,5 +503,5 @@
 )
 {
-  Thread_Control *needs_help;
+  bool needs_help;
   Per_CPU_Control *cpu_self;
 
@@ -534,8 +530,8 @@
   switch (new_state) {
     case SCHEDULER_SMP_NODE_SCHEDULED:
-      rtems_test_assert(needs_help == other);
+      rtems_test_assert(!needs_help);
       break;
     case SCHEDULER_SMP_NODE_READY:
-      rtems_test_assert(needs_help == executing);
+      rtems_test_assert(needs_help);
       break;
     default:
