diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-05-15 10:31:22 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-05-15 12:18:49 +0200 |
commit | c0bff5e936c4b967fe490e1e11eda00c638a8f6a (patch) | |
tree | 20de9081d713ebcc285ed0c592a38be6782fc3d3 /cpukit/score/src/schedulerprioritysmp.c | |
parent | score: Make _Thread_queue_Requeue() static (diff) | |
download | rtems-c0bff5e936c4b967fe490e1e11eda00c638a8f6a.tar.bz2 |
score: Split SMP scheduler enqueue function
Extract code from _Scheduler_SMP_Enqueue_ordered() and move it to the
new function _Scheduler_SMP_Enqueue_scheduled_ordered() to avoid
untestable execution paths.
Add and use function _Scheduler_SMP_Unblock().
Diffstat (limited to 'cpukit/score/src/schedulerprioritysmp.c')
-rw-r--r-- | cpukit/score/src/schedulerprioritysmp.c | 71 |
1 files changed, 58 insertions, 13 deletions
diff --git a/cpukit/score/src/schedulerprioritysmp.c b/cpukit/score/src/schedulerprioritysmp.c index 956b7cf90f..56bb0ac91b 100644 --- a/cpukit/score/src/schedulerprioritysmp.c +++ b/cpukit/score/src/schedulerprioritysmp.c @@ -228,7 +228,6 @@ void _Scheduler_priority_SMP_Block( static void _Scheduler_priority_SMP_Enqueue_ordered( Scheduler_Context *context, Thread_Control *thread, - bool has_processor_allocated, Chain_Node_order order, Scheduler_SMP_Insert insert_ready, Scheduler_SMP_Insert insert_scheduled @@ -237,26 +236,21 @@ static void _Scheduler_priority_SMP_Enqueue_ordered( _Scheduler_SMP_Enqueue_ordered( context, thread, - has_processor_allocated, order, - _Scheduler_priority_SMP_Get_highest_ready, insert_ready, insert_scheduled, - _Scheduler_priority_SMP_Move_from_ready_to_scheduled, _Scheduler_priority_SMP_Move_from_scheduled_to_ready ); } static void _Scheduler_priority_SMP_Enqueue_lifo( Scheduler_Context *context, - Thread_Control *thread, - bool has_processor_allocated + Thread_Control *thread ) { _Scheduler_priority_SMP_Enqueue_ordered( context, thread, - has_processor_allocated, _Scheduler_simple_Insert_priority_lifo_order, _Scheduler_priority_SMP_Insert_ready_lifo, _Scheduler_SMP_Insert_scheduled_lifo @@ -265,14 +259,59 @@ static void _Scheduler_priority_SMP_Enqueue_lifo( static void _Scheduler_priority_SMP_Enqueue_fifo( Scheduler_Context *context, - Thread_Control *thread, - bool has_processor_allocated + Thread_Control *thread ) { _Scheduler_priority_SMP_Enqueue_ordered( context, thread, - has_processor_allocated, + _Scheduler_simple_Insert_priority_fifo_order, + _Scheduler_priority_SMP_Insert_ready_fifo, + _Scheduler_SMP_Insert_scheduled_fifo + ); +} + +static void _Scheduler_priority_SMP_Enqueue_scheduled_ordered( + Scheduler_Context *context, + Thread_Control *thread, + Chain_Node_order order, + Scheduler_SMP_Insert insert_ready, + Scheduler_SMP_Insert insert_scheduled +) +{ + _Scheduler_SMP_Enqueue_scheduled_ordered( + context, + thread, + order, + _Scheduler_priority_SMP_Get_highest_ready, + insert_ready, + insert_scheduled, + _Scheduler_priority_SMP_Move_from_ready_to_scheduled + ); +} + +static void _Scheduler_priority_SMP_Enqueue_scheduled_lifo( + Scheduler_Context *context, + Thread_Control *thread +) +{ + _Scheduler_priority_SMP_Enqueue_scheduled_ordered( + context, + thread, + _Scheduler_simple_Insert_priority_lifo_order, + _Scheduler_priority_SMP_Insert_ready_lifo, + _Scheduler_SMP_Insert_scheduled_lifo + ); +} + +static void _Scheduler_priority_SMP_Enqueue_scheduled_fifo( + Scheduler_Context *context, + Thread_Control *thread +) +{ + _Scheduler_priority_SMP_Enqueue_scheduled_ordered( + context, + thread, _Scheduler_simple_Insert_priority_fifo_order, _Scheduler_priority_SMP_Insert_ready_fifo, _Scheduler_SMP_Insert_scheduled_fifo @@ -286,7 +325,11 @@ void _Scheduler_priority_SMP_Unblock( { Scheduler_Context *context = _Scheduler_Get_context( scheduler ); - _Scheduler_priority_SMP_Enqueue_fifo( context, thread, false ); + _Scheduler_SMP_Unblock( + context, + thread, + _Scheduler_priority_SMP_Enqueue_fifo + ); } void _Scheduler_priority_SMP_Change_priority( @@ -306,7 +349,9 @@ void _Scheduler_priority_SMP_Change_priority( _Scheduler_priority_SMP_Extract_from_ready, _Scheduler_priority_SMP_Do_update, _Scheduler_priority_SMP_Enqueue_fifo, - _Scheduler_priority_SMP_Enqueue_lifo + _Scheduler_priority_SMP_Enqueue_lifo, + _Scheduler_priority_SMP_Enqueue_scheduled_fifo, + _Scheduler_priority_SMP_Enqueue_scheduled_lifo ); } @@ -321,7 +366,7 @@ void _Scheduler_priority_SMP_Yield( _ISR_Disable( level ); _Scheduler_SMP_Extract_from_scheduled( thread ); - _Scheduler_priority_SMP_Enqueue_fifo( context, thread, true ); + _Scheduler_priority_SMP_Enqueue_scheduled_fifo( context, thread ); _ISR_Enable( level ); } |