summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTian Ye <tianye@sugon.com>2022-05-12 10:48:55 +0800
committerSebastian Huber <sebastian.huber@embedded-brains.de>2022-05-12 09:02:26 +0200
commit901bc146b0d7440792ba0d39433c1abee94a9679 (patch)
tree5ed11ec06b43add597cdd0f904ab44e5d78748d4
parentbuild: Check for psxtests prerequisites (diff)
downloadrtems-901bc146b0d7440792ba0d39433c1abee94a9679.tar.bz2
score: Add SMP priority affinity scheduler yield
Diffstat (limited to '')
-rw-r--r--cpukit/include/rtems/score/schedulerpriorityaffinitysmp.h8
-rw-r--r--cpukit/score/src/schedulerpriorityaffinitysmp.c18
2 files changed, 25 insertions, 1 deletions
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,