[rtems commit] score: Strong APA scheduler processor allocation

Sebastian Huber sebh at rtems.org
Thu Jun 30 07:55:17 UTC 2016


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

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Jun 30 06:23:56 2016 +0200

score: Strong APA scheduler processor allocation

Use _Scheduler_SMP_Allocate_processor_exact() to prevent unexpected
migrations.

---

 cpukit/score/include/rtems/score/schedulersmpimpl.h | 21 +++++++++++++++++++++
 cpukit/score/src/schedulerpriorityaffinitysmp.c     | 21 ---------------------
 cpukit/score/src/schedulerstrongapa.c               |  6 +++---
 3 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/cpukit/score/include/rtems/score/schedulersmpimpl.h b/cpukit/score/include/rtems/score/schedulersmpimpl.h
index a6796a5..f2c9919 100644
--- a/cpukit/score/include/rtems/score/schedulersmpimpl.h
+++ b/cpukit/score/include/rtems/score/schedulersmpimpl.h
@@ -487,6 +487,27 @@ static inline void _Scheduler_SMP_Allocate_processor_lazy(
   }
 }
 
+/*
+ * This method is slightly different from
+ * _Scheduler_SMP_Allocate_processor_lazy() in that it does what it is asked to
+ * do.  _Scheduler_SMP_Allocate_processor_lazy() attempts to prevent migrations
+ * but does not take into account affinity.
+ */
+static inline void _Scheduler_SMP_Allocate_processor_exact(
+  Scheduler_Context *context,
+  Thread_Control    *scheduled_thread,
+  Thread_Control    *victim_thread
+)
+{
+  Per_CPU_Control *victim_cpu = _Thread_Get_CPU( victim_thread );
+  Per_CPU_Control *cpu_self = _Per_CPU_Get();
+
+  (void) context;
+
+  _Thread_Set_CPU( scheduled_thread, victim_cpu );
+  _Thread_Dispatch_update_heir( cpu_self, victim_cpu, scheduled_thread );
+}
+
 static inline void _Scheduler_SMP_Allocate_processor(
   Scheduler_Context                *context,
   Scheduler_Node                   *scheduled,
diff --git a/cpukit/score/src/schedulerpriorityaffinitysmp.c b/cpukit/score/src/schedulerpriorityaffinitysmp.c
index 3618f4c..76b4601 100644
--- a/cpukit/score/src/schedulerpriorityaffinitysmp.c
+++ b/cpukit/score/src/schedulerpriorityaffinitysmp.c
@@ -113,27 +113,6 @@ void _Scheduler_priority_affinity_SMP_Node_initialize(
 }
 
 /*
- * This method is slightly different from
- * _Scheduler_SMP_Allocate_processor_lazy() in that it does what it is asked to
- * do. _Scheduler_SMP_Allocate_processor_lazy() attempts to prevent migrations
- * but does not take into account affinity.
- */
-static inline void _Scheduler_SMP_Allocate_processor_exact(
-  Scheduler_Context *context,
-  Thread_Control    *scheduled_thread,
-  Thread_Control    *victim_thread
-)
-{
-  Per_CPU_Control *victim_cpu = _Thread_Get_CPU( victim_thread );
-  Per_CPU_Control *cpu_self = _Per_CPU_Get();
-
-  (void) context;
-
-  _Thread_Set_CPU( scheduled_thread, victim_cpu );
-  _Thread_Dispatch_update_heir( cpu_self, victim_cpu, scheduled_thread );
-}
-
-/*
  * This method is unique to this scheduler because it takes into
  * account affinity as it determines the highest ready thread.
  * Since this is used to pick a new thread to replace the victim,
diff --git a/cpukit/score/src/schedulerstrongapa.c b/cpukit/score/src/schedulerstrongapa.c
index 51dac67..14c238e 100644
--- a/cpukit/score/src/schedulerstrongapa.c
+++ b/cpukit/score/src/schedulerstrongapa.c
@@ -225,7 +225,7 @@ void _Scheduler_strong_APA_Block(
     _Scheduler_strong_APA_Extract_from_ready,
     _Scheduler_strong_APA_Get_highest_ready,
     _Scheduler_strong_APA_Move_from_ready_to_scheduled,
-    _Scheduler_SMP_Allocate_processor_lazy
+    _Scheduler_SMP_Allocate_processor_exact
   );
 }
 
@@ -247,7 +247,7 @@ static Thread_Control *_Scheduler_strong_APA_Enqueue_ordered(
     insert_scheduled,
     _Scheduler_strong_APA_Move_from_scheduled_to_ready,
     _Scheduler_SMP_Get_lowest_scheduled,
-    _Scheduler_SMP_Allocate_processor_lazy
+    _Scheduler_SMP_Allocate_processor_exact
   );
 }
 
@@ -300,7 +300,7 @@ static Thread_Control *_Scheduler_strong_APA_Enqueue_scheduled_ordered(
     insert_ready,
     insert_scheduled,
     _Scheduler_strong_APA_Move_from_ready_to_scheduled,
-    _Scheduler_SMP_Allocate_processor_lazy
+    _Scheduler_SMP_Allocate_processor_exact
   );
 }
 



More information about the vc mailing list