diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-06-10 16:15:46 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-06-14 16:26:08 +0200 |
commit | 6eba7c857b9e72bc4ed8e55f0c9538c45631484f (patch) | |
tree | 09847feda8d2183412ab57d59602b3f08481d2ae /cpukit/score/src/scheduleredfyield.c | |
parent | scheduler: Add start idle thread operation (diff) | |
download | rtems-6eba7c857b9e72bc4ed8e55f0c9538c45631484f.tar.bz2 |
scheduler: Specify thread of yield operation
The yielding thread of the yield operation is now specified by a
parameter. The tick operation may be performed for each executing
thread in a SMP configuration.
Diffstat (limited to 'cpukit/score/src/scheduleredfyield.c')
-rw-r--r-- | cpukit/score/src/scheduleredfyield.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/cpukit/score/src/scheduleredfyield.c b/cpukit/score/src/scheduleredfyield.c index d6862540a0..4ba9f79b77 100644 --- a/cpukit/score/src/scheduleredfyield.c +++ b/cpukit/score/src/scheduleredfyield.c @@ -25,14 +25,13 @@ #include <rtems/score/scheduleredf.h> #include <rtems/score/thread.h> -void _Scheduler_EDF_Yield(void) +void _Scheduler_EDF_Yield( Thread_Control *thread ) { ISR_Level level; - Thread_Control *executing = _Thread_Executing; - Scheduler_EDF_Per_thread *executing_info = - (Scheduler_EDF_Per_thread *) executing->scheduler_info; - RBTree_Node *executing_node = &(executing_info->Node); + Scheduler_EDF_Per_thread *thread_info = + (Scheduler_EDF_Per_thread *) thread->scheduler_info; + RBTree_Node *thread_node = &(thread_info->Node); _ISR_Disable( level ); @@ -40,8 +39,8 @@ void _Scheduler_EDF_Yield(void) * The RBTree has more than one node, enqueue behind the tasks * with the same priority in case there are such ones. */ - _RBTree_Extract( &_Scheduler_EDF_Ready_queue, executing_node ); - _RBTree_Insert( &_Scheduler_EDF_Ready_queue, executing_node ); + _RBTree_Extract( &_Scheduler_EDF_Ready_queue, thread_node ); + _RBTree_Insert( &_Scheduler_EDF_Ready_queue, thread_node ); _ISR_Flash( level ); |