summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-06-30 06:23:56 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-06-30 09:51:18 +0200
commit09c87fb06b4dacb296c1cd72a3452e9d22ee116d (patch)
treec62bb6ff80d38e81bab0ab8ee7cab7aea9bd55b0
parentscore: Avoid atomic fences for thread wait flags (diff)
downloadrtems-09c87fb06b4dacb296c1cd72a3452e9d22ee116d.tar.bz2
score: Strong APA scheduler processor allocation
Use _Scheduler_SMP_Allocate_processor_exact() to prevent unexpected migrations.
-rw-r--r--cpukit/score/include/rtems/score/schedulersmpimpl.h21
-rw-r--r--cpukit/score/src/schedulerpriorityaffinitysmp.c21
-rw-r--r--cpukit/score/src/schedulerstrongapa.c6
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 a6796a5a98..f2c9919d6b 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 3618f4c901..76b46010cb 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 51dac679ed..14c238e550 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
);
}