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 @@ -112,27 +112,6 @@ void _Scheduler_priority_affinity_SMP_Node_initialize( node->Affinity.set = &node->Affinity.preallocated; } -/* - * 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. 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 ); }