diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-06-30 06:23:56 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-06-30 09:51:18 +0200 |
commit | 09c87fb06b4dacb296c1cd72a3452e9d22ee116d (patch) | |
tree | c62bb6ff80d38e81bab0ab8ee7cab7aea9bd55b0 | |
parent | score: Avoid atomic fences for thread wait flags (diff) | |
download | rtems-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.h | 21 | ||||
-rw-r--r-- | cpukit/score/src/schedulerpriorityaffinitysmp.c | 21 | ||||
-rw-r--r-- | 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 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 ); } |