From 901bc146b0d7440792ba0d39433c1abee94a9679 Mon Sep 17 00:00:00 2001 From: Tian Ye Date: Thu, 12 May 2022 10:48:55 +0800 Subject: score: Add SMP priority affinity scheduler yield --- .../include/rtems/score/schedulerpriorityaffinitysmp.h | 8 +++++++- cpukit/score/src/schedulerpriorityaffinitysmp.c | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/cpukit/include/rtems/score/schedulerpriorityaffinitysmp.h b/cpukit/include/rtems/score/schedulerpriorityaffinitysmp.h index 309117c199..2279fddaf7 100644 --- a/cpukit/include/rtems/score/schedulerpriorityaffinitysmp.h +++ b/cpukit/include/rtems/score/schedulerpriorityaffinitysmp.h @@ -75,7 +75,7 @@ extern "C" { { \ _Scheduler_priority_SMP_Initialize, \ _Scheduler_default_Schedule, \ - _Scheduler_priority_SMP_Yield, \ + _Scheduler_priority_affinity_SMP_Yield, \ _Scheduler_priority_affinity_SMP_Block, \ _Scheduler_priority_affinity_SMP_Unblock, \ _Scheduler_priority_affinity_SMP_Update_priority, \ @@ -129,6 +129,12 @@ void _Scheduler_priority_affinity_SMP_Block( Scheduler_Node *node ); +void _Scheduler_priority_affinity_SMP_Yield( + const Scheduler_Control *scheduler, + Thread_Control *thread, + Scheduler_Node *node +); + /** * @brief Unblocks a thread. * diff --git a/cpukit/score/src/schedulerpriorityaffinitysmp.c b/cpukit/score/src/schedulerpriorityaffinitysmp.c index 358722e130..5d6d65ffba 100644 --- a/cpukit/score/src/schedulerpriorityaffinitysmp.c +++ b/cpukit/score/src/schedulerpriorityaffinitysmp.c @@ -619,6 +619,24 @@ Thread_Control *_Scheduler_priority_affinity_SMP_Remove_processor( ); } +void _Scheduler_priority_affinity_SMP_Yield( + const Scheduler_Control *scheduler, + Thread_Control *thread, + Scheduler_Node *node +) +{ + Scheduler_Context *context = _Scheduler_Get_context( scheduler ); + + _Scheduler_SMP_Yield( + context, + thread, + node, + _Scheduler_priority_SMP_Extract_from_ready, + _Scheduler_priority_affinity_SMP_Enqueue, + _Scheduler_priority_affinity_SMP_Enqueue_scheduled + ); +} + Status_Control _Scheduler_priority_affinity_SMP_Set_affinity( const Scheduler_Control *scheduler, Thread_Control *thread, -- cgit v1.2.3