mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-02 05:49:07 +08:00
score: Strong APA scheduler processor allocation
Use _Scheduler_SMP_Allocate_processor_exact() to prevent unexpected migrations.
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user