summaryrefslogtreecommitdiffstats
path: root/cpukit/score/src/schedulerpriorityaffinitysmp.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-07-08 10:38:19 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-07-08 16:30:48 +0200
commit19e417678a3d68c5dee3708bf699b1f9e38ff1cb (patch)
tree442e9f0f2faab0b983c614fdd8dcb829e3ce6911 /cpukit/score/src/schedulerpriorityaffinitysmp.c
parentscore: Rename _Scheduler_SMP_Update_heir() (diff)
downloadrtems-19e417678a3d68c5dee3708bf699b1f9e38ff1cb.tar.bz2
score: Simplify SMP processor allocation
Avoid copy and paste and set the scheduler node state in one place.
Diffstat (limited to 'cpukit/score/src/schedulerpriorityaffinitysmp.c')
-rw-r--r--cpukit/score/src/schedulerpriorityaffinitysmp.c25
1 files changed, 10 insertions, 15 deletions
diff --git a/cpukit/score/src/schedulerpriorityaffinitysmp.c b/cpukit/score/src/schedulerpriorityaffinitysmp.c
index f1e2252b2e..49601d5642 100644
--- a/cpukit/score/src/schedulerpriorityaffinitysmp.c
+++ b/cpukit/score/src/schedulerpriorityaffinitysmp.c
@@ -104,28 +104,22 @@ void _Scheduler_priority_affinity_SMP_Node_initialize(
}
/*
- * This method is slightly different from _Scheduler_SMP_Allocate_processor()
- * in that it does what it is asked to do. _Scheduler_SMP_Allocate_processor()
- * attempts to prevent migrations but does not take into account affinity
+ * 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,
- Scheduler_Node *scheduled,
- Scheduler_Node *victim
+ Scheduler_Context *context,
+ Thread_Control *scheduled_thread,
+ Thread_Control *victim_thread
)
{
- Thread_Control *victim_thread = _Scheduler_Node_get_owner( victim );
- Thread_Control *scheduled_thread = _Scheduler_Node_get_owner( scheduled );
Per_CPU_Control *victim_cpu = _Thread_Get_CPU( victim_thread );
Per_CPU_Control *cpu_self = _Per_CPU_Get();
(void) context;
- _Scheduler_SMP_Node_change_state(
- _Scheduler_SMP_Node_downcast( scheduled ),
- SCHEDULER_SMP_NODE_SCHEDULED
- );
-
_Thread_Set_CPU( scheduled_thread, victim_cpu );
_Thread_Dispatch_update_heir( cpu_self, victim_cpu, scheduled_thread );
}
@@ -358,10 +352,11 @@ static void _Scheduler_priority_affinity_SMP_Check_for_migrations(
SCHEDULER_SMP_NODE_READY
);
- _Scheduler_SMP_Allocate_processor_exact(
+ _Scheduler_SMP_Allocate_processor(
context,
highest_ready,
- lowest_scheduled
+ lowest_scheduled,
+ _Scheduler_SMP_Allocate_processor_exact
);
_Scheduler_priority_SMP_Move_from_ready_to_scheduled(