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 /cpukit/score/include/rtems/score/schedulersmpimpl.h | |
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.
Diffstat (limited to 'cpukit/score/include/rtems/score/schedulersmpimpl.h')
-rw-r--r-- | cpukit/score/include/rtems/score/schedulersmpimpl.h | 21 |
1 files changed, 21 insertions, 0 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, |