diff options
Diffstat (limited to 'cpukit/score/src')
61 files changed, 288 insertions, 326 deletions
diff --git a/cpukit/score/src/scheduler.c b/cpukit/score/src/scheduler.c index 7705472b35..ef5a0a9c00 100644 --- a/cpukit/score/src/scheduler.c +++ b/cpukit/score/src/scheduler.c @@ -22,5 +22,12 @@ void _Scheduler_Handler_initialization(void) { - (*_Scheduler.Operations.initialize)(); + size_t n = _Scheduler_Count; + size_t i; + + for ( i = 0 ; i < n ; ++i ) { + const Scheduler_Control *scheduler = &_Scheduler_Table[ i ]; + + ( *scheduler->Operations.initialize )( scheduler ); + } } diff --git a/cpukit/score/src/schedulercbs.c b/cpukit/score/src/schedulercbs.c index c427c5254f..54312b2ca6 100644 --- a/cpukit/score/src/schedulercbs.c +++ b/cpukit/score/src/schedulercbs.c @@ -22,8 +22,6 @@ #include <rtems/score/threadimpl.h> #include <rtems/score/wkspace.h> -Scheduler_CBS_Server **_Scheduler_CBS_Server_list; - void _Scheduler_CBS_Budget_callout( Thread_Control *the_thread ) @@ -52,13 +50,5 @@ void _Scheduler_CBS_Budget_callout( int _Scheduler_CBS_Initialize(void) { - unsigned int i; - _Scheduler_CBS_Server_list = (Scheduler_CBS_Server **) _Workspace_Allocate( - _Scheduler_CBS_Maximum_servers * sizeof(Scheduler_CBS_Server*) ); - if ( !_Scheduler_CBS_Server_list ) - return SCHEDULER_CBS_ERROR_NO_MEMORY; - for (i = 0; i<_Scheduler_CBS_Maximum_servers; i++) { - _Scheduler_CBS_Server_list[i] = NULL; - } return SCHEDULER_CBS_OK; } diff --git a/cpukit/score/src/schedulercbsallocate.c b/cpukit/score/src/schedulercbsallocate.c index 908ea90933..1190b84254 100644 --- a/cpukit/score/src/schedulercbsallocate.c +++ b/cpukit/score/src/schedulercbsallocate.c @@ -26,8 +26,8 @@ #include <rtems/score/wkspace.h> void *_Scheduler_CBS_Allocate( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { void *sched; diff --git a/cpukit/score/src/schedulercbsattachthread.c b/cpukit/score/src/schedulercbsattachthread.c index ad9279176c..43bf92da66 100644 --- a/cpukit/score/src/schedulercbsattachthread.c +++ b/cpukit/score/src/schedulercbsattachthread.c @@ -33,11 +33,11 @@ int _Scheduler_CBS_Attach_thread ( return SCHEDULER_CBS_ERROR_INVALID_PARAMETER; /* Server is not valid. */ - if ( !_Scheduler_CBS_Server_list[server_id] ) + if ( !_Scheduler_CBS_Server_list[server_id].initialized ) return SCHEDULER_CBS_ERROR_NOSERVER; /* Server is already attached to a thread. */ - if ( _Scheduler_CBS_Server_list[server_id]->task_id != -1 ) + if ( _Scheduler_CBS_Server_list[server_id].task_id != -1 ) return SCHEDULER_CBS_ERROR_FULL; the_thread = _Thread_Get(task_id, &location); @@ -53,8 +53,8 @@ int _Scheduler_CBS_Attach_thread ( return SCHEDULER_CBS_ERROR_FULL; } - _Scheduler_CBS_Server_list[server_id]->task_id = task_id; - sched_info->cbs_server = (void *) _Scheduler_CBS_Server_list[server_id]; + _Scheduler_CBS_Server_list[server_id].task_id = task_id; + sched_info->cbs_server = &_Scheduler_CBS_Server_list[server_id]; the_thread->budget_callout = _Scheduler_CBS_Budget_callout; the_thread->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_CALLOUT; diff --git a/cpukit/score/src/schedulercbscleanup.c b/cpukit/score/src/schedulercbscleanup.c index 795b16a5dc..01dd0d8317 100644 --- a/cpukit/score/src/schedulercbscleanup.c +++ b/cpukit/score/src/schedulercbscleanup.c @@ -26,9 +26,8 @@ int _Scheduler_CBS_Cleanup (void) unsigned int i; for ( i = 0; i<_Scheduler_CBS_Maximum_servers; i++ ) { - if ( _Scheduler_CBS_Server_list[ i ] ) + if ( _Scheduler_CBS_Server_list[ i ].initialized ) _Scheduler_CBS_Destroy_server( i ); } - _Workspace_Free( _Scheduler_CBS_Server_list ); return SCHEDULER_CBS_OK; } diff --git a/cpukit/score/src/schedulercbscreateserver.c b/cpukit/score/src/schedulercbscreateserver.c index 85ed6d4f96..486329c710 100644 --- a/cpukit/score/src/schedulercbscreateserver.c +++ b/cpukit/score/src/schedulercbscreateserver.c @@ -19,7 +19,6 @@ #endif #include <rtems/score/schedulercbs.h> -#include <rtems/score/wkspace.h> int _Scheduler_CBS_Create_server ( Scheduler_CBS_Parameters *params, @@ -37,7 +36,7 @@ int _Scheduler_CBS_Create_server ( return SCHEDULER_CBS_ERROR_INVALID_PARAMETER; for ( i = 0; i<_Scheduler_CBS_Maximum_servers; i++ ) { - if ( !_Scheduler_CBS_Server_list[i] ) + if ( !_Scheduler_CBS_Server_list[i].initialized ) break; } @@ -45,14 +44,10 @@ int _Scheduler_CBS_Create_server ( return SCHEDULER_CBS_ERROR_FULL; *server_id = i; - _Scheduler_CBS_Server_list[*server_id] = (Scheduler_CBS_Server *) - _Workspace_Allocate( sizeof(Scheduler_CBS_Server) ); - the_server = _Scheduler_CBS_Server_list[*server_id]; - if ( !the_server ) - return SCHEDULER_CBS_ERROR_NO_MEMORY; - + the_server = &_Scheduler_CBS_Server_list[*server_id]; the_server->parameters = *params; the_server->task_id = -1; the_server->cbs_budget_overrun = budget_overrun_callback; + the_server->initialized = true; return SCHEDULER_CBS_OK; } diff --git a/cpukit/score/src/schedulercbsdestroyserver.c b/cpukit/score/src/schedulercbsdestroyserver.c index d8885a89c6..2407a48bf8 100644 --- a/cpukit/score/src/schedulercbsdestroyserver.c +++ b/cpukit/score/src/schedulercbsdestroyserver.c @@ -32,13 +32,12 @@ int _Scheduler_CBS_Destroy_server ( if ( server_id >= _Scheduler_CBS_Maximum_servers ) return SCHEDULER_CBS_ERROR_INVALID_PARAMETER; - if ( !_Scheduler_CBS_Server_list[server_id] ) + if ( !_Scheduler_CBS_Server_list[server_id].initialized ) return SCHEDULER_CBS_ERROR_NOSERVER; - if ( (tid = _Scheduler_CBS_Server_list[server_id]->task_id) != -1 ) + if ( (tid = _Scheduler_CBS_Server_list[server_id].task_id) != -1 ) ret = _Scheduler_CBS_Detach_thread ( server_id, tid ); - _Workspace_Free( _Scheduler_CBS_Server_list[server_id] ); - _Scheduler_CBS_Server_list[server_id] = NULL; + _Scheduler_CBS_Server_list[server_id].initialized = false; return ret; } diff --git a/cpukit/score/src/schedulercbsdetachthread.c b/cpukit/score/src/schedulercbsdetachthread.c index f8a5e32c7f..0f77cdf10e 100644 --- a/cpukit/score/src/schedulercbsdetachthread.c +++ b/cpukit/score/src/schedulercbsdetachthread.c @@ -34,16 +34,16 @@ int _Scheduler_CBS_Detach_thread ( if ( server_id >= _Scheduler_CBS_Maximum_servers ) return SCHEDULER_CBS_ERROR_INVALID_PARAMETER; /* Server is not valid. */ - if ( !_Scheduler_CBS_Server_list[server_id] ) + if ( !_Scheduler_CBS_Server_list[server_id].initialized ) return SCHEDULER_CBS_ERROR_NOSERVER; /* Thread and server are not attached. */ - if ( _Scheduler_CBS_Server_list[server_id]->task_id != task_id ) + if ( _Scheduler_CBS_Server_list[server_id].task_id != task_id ) return SCHEDULER_CBS_ERROR_INVALID_PARAMETER; the_thread = _Thread_Get(task_id, &location); /* The routine _Thread_Get may disable dispatch and not enable again. */ if ( the_thread ) { - _Scheduler_CBS_Server_list[server_id]->task_id = -1; + _Scheduler_CBS_Server_list[server_id].task_id = -1; sched_info = (Scheduler_CBS_Per_thread *) the_thread->scheduler_info; sched_info->cbs_server = NULL; diff --git a/cpukit/score/src/schedulercbsgetapprovedbudget.c b/cpukit/score/src/schedulercbsgetapprovedbudget.c index 560849ec3c..d1ea5ce0ed 100644 --- a/cpukit/score/src/schedulercbsgetapprovedbudget.c +++ b/cpukit/score/src/schedulercbsgetapprovedbudget.c @@ -30,9 +30,9 @@ int _Scheduler_CBS_Get_approved_budget ( { if ( server_id >= _Scheduler_CBS_Maximum_servers ) return SCHEDULER_CBS_ERROR_INVALID_PARAMETER; - if ( !_Scheduler_CBS_Server_list[server_id] ) + if ( !_Scheduler_CBS_Server_list[server_id].initialized ) return SCHEDULER_CBS_ERROR_NOSERVER; - *approved_budget = _Scheduler_CBS_Server_list[server_id]->parameters.budget; + *approved_budget = _Scheduler_CBS_Server_list[server_id].parameters.budget; return SCHEDULER_CBS_OK; } diff --git a/cpukit/score/src/schedulercbsgetexecutiontime.c b/cpukit/score/src/schedulercbsgetexecutiontime.c index 325c7598f6..ee139e640d 100644 --- a/cpukit/score/src/schedulercbsgetexecutiontime.c +++ b/cpukit/score/src/schedulercbsgetexecutiontime.c @@ -33,25 +33,25 @@ int _Scheduler_CBS_Get_execution_time ( if ( server_id >= _Scheduler_CBS_Maximum_servers ) return SCHEDULER_CBS_ERROR_INVALID_PARAMETER; - if ( !_Scheduler_CBS_Server_list[server_id] ) + if ( !_Scheduler_CBS_Server_list[server_id].initialized ) return SCHEDULER_CBS_ERROR_NOSERVER; - if ( _Scheduler_CBS_Server_list[server_id]->task_id == -1 ) { + if ( _Scheduler_CBS_Server_list[server_id].task_id == -1 ) { *exec_time = 0; return SCHEDULER_CBS_OK; } the_thread = _Thread_Get( - _Scheduler_CBS_Server_list[server_id]->task_id, + _Scheduler_CBS_Server_list[server_id].task_id, &location ); /* The routine _Thread_Get may disable dispatch and not enable again. */ if ( the_thread ) { - *exec_time = _Scheduler_CBS_Server_list[server_id]->parameters.budget - + *exec_time = _Scheduler_CBS_Server_list[server_id].parameters.budget - the_thread->cpu_time_budget; _Objects_Put( &the_thread->Object ); } else { - *exec_time = _Scheduler_CBS_Server_list[server_id]->parameters.budget; + *exec_time = _Scheduler_CBS_Server_list[server_id].parameters.budget; } return SCHEDULER_CBS_OK; } diff --git a/cpukit/score/src/schedulercbsgetparameters.c b/cpukit/score/src/schedulercbsgetparameters.c index 12c9489f23..18dbc0ef1a 100644 --- a/cpukit/score/src/schedulercbsgetparameters.c +++ b/cpukit/score/src/schedulercbsgetparameters.c @@ -30,9 +30,9 @@ int _Scheduler_CBS_Get_parameters ( { if ( server_id >= _Scheduler_CBS_Maximum_servers ) return SCHEDULER_CBS_ERROR_INVALID_PARAMETER; - if ( !_Scheduler_CBS_Server_list[server_id] ) + if ( !_Scheduler_CBS_Server_list[server_id].initialized ) return SCHEDULER_CBS_ERROR_NOSERVER; - *params = _Scheduler_CBS_Server_list[server_id]->parameters; + *params = _Scheduler_CBS_Server_list[server_id].parameters; return SCHEDULER_CBS_OK; } diff --git a/cpukit/score/src/schedulercbsgetremainingbudget.c b/cpukit/score/src/schedulercbsgetremainingbudget.c index df4709dfb0..a031ba4e87 100644 --- a/cpukit/score/src/schedulercbsgetremainingbudget.c +++ b/cpukit/score/src/schedulercbsgetremainingbudget.c @@ -31,15 +31,15 @@ int _Scheduler_CBS_Get_remaining_budget ( if ( server_id >= _Scheduler_CBS_Maximum_servers ) return SCHEDULER_CBS_ERROR_INVALID_PARAMETER; - if ( !_Scheduler_CBS_Server_list[server_id] ) + if ( !_Scheduler_CBS_Server_list[server_id].initialized ) return SCHEDULER_CBS_ERROR_NOSERVER; - if ( _Scheduler_CBS_Server_list[server_id]->task_id == -1 ) { - *remaining_budget = _Scheduler_CBS_Server_list[server_id]->parameters.budget; + if ( _Scheduler_CBS_Server_list[server_id].task_id == -1 ) { + *remaining_budget = _Scheduler_CBS_Server_list[server_id].parameters.budget; return SCHEDULER_CBS_OK; } the_thread = _Thread_Get( - _Scheduler_CBS_Server_list[server_id]->task_id, + _Scheduler_CBS_Server_list[server_id].task_id, &location ); /* The routine _Thread_Get may disable dispatch and not enable again. */ diff --git a/cpukit/score/src/schedulercbsgetserverid.c b/cpukit/score/src/schedulercbsgetserverid.c index 0711baee11..235b559d34 100644 --- a/cpukit/score/src/schedulercbsgetserverid.c +++ b/cpukit/score/src/schedulercbsgetserverid.c @@ -30,8 +30,8 @@ int _Scheduler_CBS_Get_server_id ( { unsigned int i; for ( i = 0; i<_Scheduler_CBS_Maximum_servers; i++ ) { - if ( _Scheduler_CBS_Server_list[i] && - _Scheduler_CBS_Server_list[i]->task_id == task_id ) { + if ( _Scheduler_CBS_Server_list[i].initialized && + _Scheduler_CBS_Server_list[i].task_id == task_id ) { *server_id = i; return SCHEDULER_CBS_OK; } diff --git a/cpukit/score/src/schedulercbsreleasejob.c b/cpukit/score/src/schedulercbsreleasejob.c index f4fc1a817c..c5ac572a61 100644 --- a/cpukit/score/src/schedulercbsreleasejob.c +++ b/cpukit/score/src/schedulercbsreleasejob.c @@ -24,9 +24,9 @@ #include <rtems/score/watchdogimpl.h> void _Scheduler_CBS_Release_job( - Scheduler_Control *scheduler, - Thread_Control *the_thread, - uint32_t deadline + const Scheduler_Control *scheduler, + Thread_Control *the_thread, + uint32_t deadline ) { Priority_Control new_priority; diff --git a/cpukit/score/src/schedulercbssetparameters.c b/cpukit/score/src/schedulercbssetparameters.c index 8c452327ed..6ddaf3d272 100644 --- a/cpukit/score/src/schedulercbssetparameters.c +++ b/cpukit/score/src/schedulercbssetparameters.c @@ -38,9 +38,9 @@ int _Scheduler_CBS_Set_parameters ( params->deadline >= SCHEDULER_EDF_PRIO_MSB ) return SCHEDULER_CBS_ERROR_INVALID_PARAMETER; - if ( !_Scheduler_CBS_Server_list[server_id] ) + if ( !_Scheduler_CBS_Server_list[server_id].initialized ) return SCHEDULER_CBS_ERROR_NOSERVER; - _Scheduler_CBS_Server_list[server_id]->parameters = *params; + _Scheduler_CBS_Server_list[server_id].parameters = *params; return SCHEDULER_CBS_OK; } diff --git a/cpukit/score/src/schedulercbsunblock.c b/cpukit/score/src/schedulercbsunblock.c index 11465f2ba2..030cc85c68 100644 --- a/cpukit/score/src/schedulercbsunblock.c +++ b/cpukit/score/src/schedulercbsunblock.c @@ -25,8 +25,8 @@ #include <rtems/score/watchdogimpl.h> void _Scheduler_CBS_Unblock( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { Scheduler_CBS_Per_thread *sched_info; diff --git a/cpukit/score/src/schedulerdefaultallocatefree.c b/cpukit/score/src/schedulerdefaultallocatefree.c index 7ffade29e5..4efed5bad8 100644 --- a/cpukit/score/src/schedulerdefaultallocatefree.c +++ b/cpukit/score/src/schedulerdefaultallocatefree.c @@ -22,8 +22,8 @@ #include <rtems/score/scheduler.h> void *_Scheduler_default_Allocate( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { ( void ) scheduler; @@ -33,8 +33,8 @@ void *_Scheduler_default_Allocate( } void _Scheduler_default_Free( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { ( void ) scheduler; diff --git a/cpukit/score/src/schedulerdefaultgetaffinity.c b/cpukit/score/src/schedulerdefaultgetaffinity.c index b4a1d1aa9a..367fc25293 100644 --- a/cpukit/score/src/schedulerdefaultgetaffinity.c +++ b/cpukit/score/src/schedulerdefaultgetaffinity.c @@ -23,10 +23,10 @@ #include <rtems/score/cpusetimpl.h> bool _Scheduler_default_Get_affinity( - Scheduler_Control *scheduler, - Thread_Control *thread, - size_t cpusetsize, - cpu_set_t *cpuset + const Scheduler_Control *scheduler, + Thread_Control *thread, + size_t cpusetsize, + cpu_set_t *cpuset ) { const CPU_set_Control *ctl; diff --git a/cpukit/score/src/schedulerdefaultreleasejob.c b/cpukit/score/src/schedulerdefaultreleasejob.c index 10ebf84874..90593abc44 100644 --- a/cpukit/score/src/schedulerdefaultreleasejob.c +++ b/cpukit/score/src/schedulerdefaultreleasejob.c @@ -22,9 +22,9 @@ #include <rtems/score/scheduler.h> void _Scheduler_default_Release_job( - Scheduler_Control *scheduler, - Thread_Control *the_thread, - uint32_t deadline + const Scheduler_Control *scheduler, + Thread_Control *the_thread, + uint32_t deadline ) { ( void ) scheduler; diff --git a/cpukit/score/src/schedulerdefaultsetaffinity.c b/cpukit/score/src/schedulerdefaultsetaffinity.c index 1115f3a0db..33be12b286 100644 --- a/cpukit/score/src/schedulerdefaultsetaffinity.c +++ b/cpukit/score/src/schedulerdefaultsetaffinity.c @@ -23,10 +23,10 @@ #include <rtems/score/cpusetimpl.h> bool _Scheduler_default_Set_affinity( - Scheduler_Control *scheduler, - Thread_Control *thread, - size_t cpusetsize, - const cpu_set_t *cpuset + const Scheduler_Control *scheduler, + Thread_Control *thread, + size_t cpusetsize, + const cpu_set_t *cpuset ) { (void) scheduler; diff --git a/cpukit/score/src/schedulerdefaultstartidle.c b/cpukit/score/src/schedulerdefaultstartidle.c index caddb7f2a2..eeed928160 100644 --- a/cpukit/score/src/schedulerdefaultstartidle.c +++ b/cpukit/score/src/schedulerdefaultstartidle.c @@ -13,9 +13,9 @@ #include <rtems/score/schedulerimpl.h> void _Scheduler_default_Start_idle( - Scheduler_Control *scheduler, - Thread_Control *the_thread, - Per_CPU_Control *cpu + const Scheduler_Control *scheduler, + Thread_Control *the_thread, + Per_CPU_Control *cpu ) { (void) cpu; diff --git a/cpukit/score/src/schedulerdefaulttick.c b/cpukit/score/src/schedulerdefaulttick.c index 3b3d9a0cbd..6e7ed376e3 100644 --- a/cpukit/score/src/schedulerdefaulttick.c +++ b/cpukit/score/src/schedulerdefaulttick.c @@ -25,8 +25,8 @@ #include <rtems/config.h> static void _Scheduler_default_Tick_for_executing( - Scheduler_Control *scheduler, - Thread_Control *executing + const Scheduler_Control *scheduler, + Thread_Control *executing ) { #ifdef __RTEMS_USE_TICKS_FOR_STATISTICS__ @@ -84,7 +84,7 @@ static void _Scheduler_default_Tick_for_executing( } } -void _Scheduler_default_Tick( Scheduler_Control *scheduler ) +void _Scheduler_default_Tick( const Scheduler_Control *scheduler ) { uint32_t processor_count = _SMP_Get_processor_count(); uint32_t processor; diff --git a/cpukit/score/src/schedulerdefaultupdate.c b/cpukit/score/src/schedulerdefaultupdate.c index c1b62b27d5..28d7e1d9a1 100644 --- a/cpukit/score/src/schedulerdefaultupdate.c +++ b/cpukit/score/src/schedulerdefaultupdate.c @@ -22,8 +22,8 @@ #include <rtems/score/scheduler.h> void _Scheduler_default_Update( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { ( void ) scheduler; diff --git a/cpukit/score/src/scheduleredf.c b/cpukit/score/src/scheduleredf.c index 502a2a1d4a..4d1aa62d08 100644 --- a/cpukit/score/src/scheduleredf.c +++ b/cpukit/score/src/scheduleredf.c @@ -18,10 +18,7 @@ #include "config.h" #endif -#include <rtems/score/scheduleredf.h> -#include <rtems/score/schedulerimpl.h> -#include <rtems/score/thread.h> -#include <rtems/score/wkspace.h> +#include <rtems/score/scheduleredfimpl.h> static int _Scheduler_EDF_RBTree_compare_function ( @@ -41,16 +38,14 @@ static int _Scheduler_EDF_RBTree_compare_function return (-1)*_Scheduler_EDF_Priority_compare(value1, value2); } -void _Scheduler_EDF_Initialize(void) +void _Scheduler_EDF_Initialize( const Scheduler_Control *scheduler ) { - Scheduler_EDF_Control *scheduler = - _Workspace_Allocate_or_fatal_error( sizeof( *scheduler ) ); + Scheduler_EDF_Context *context = + _Scheduler_EDF_Get_context( scheduler ); _RBTree_Initialize_empty( - &scheduler->Ready, + &context->Ready, _Scheduler_EDF_RBTree_compare_function, 0 ); - - _Scheduler.information = scheduler; } diff --git a/cpukit/score/src/scheduleredfallocate.c b/cpukit/score/src/scheduleredfallocate.c index 73df5b88e2..68ae12450c 100644 --- a/cpukit/score/src/scheduleredfallocate.c +++ b/cpukit/score/src/scheduleredfallocate.c @@ -25,8 +25,8 @@ #include <rtems/score/wkspace.h> void *_Scheduler_EDF_Allocate( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { void *sched; diff --git a/cpukit/score/src/scheduleredfblock.c b/cpukit/score/src/scheduleredfblock.c index 9ea5fc9a3f..aaa9c127b2 100644 --- a/cpukit/score/src/scheduleredfblock.c +++ b/cpukit/score/src/scheduleredfblock.c @@ -22,8 +22,8 @@ #include <rtems/score/scheduleredfimpl.h> void _Scheduler_EDF_Block( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { _Scheduler_Generic_block( diff --git a/cpukit/score/src/scheduleredfenqueue.c b/cpukit/score/src/scheduleredfenqueue.c index 2e7365b117..38e67eb7a7 100644 --- a/cpukit/score/src/scheduleredfenqueue.c +++ b/cpukit/score/src/scheduleredfenqueue.c @@ -21,16 +21,16 @@ #include <rtems/score/scheduleredfimpl.h> void _Scheduler_EDF_Enqueue( - Scheduler_Control *scheduler_base, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { - Scheduler_EDF_Control *scheduler = - _Scheduler_EDF_Self_from_base( scheduler_base ); + Scheduler_EDF_Context *context = + _Scheduler_EDF_Get_context( scheduler ); Scheduler_EDF_Per_thread *sched_info = (Scheduler_EDF_Per_thread*) the_thread->scheduler_info; RBTree_Node *node = &(sched_info->Node); - _RBTree_Insert( &scheduler->Ready, node ); + _RBTree_Insert( &context->Ready, node ); sched_info->queue_state = SCHEDULER_EDF_QUEUE_STATE_YES; } diff --git a/cpukit/score/src/scheduleredfenqueuefirst.c b/cpukit/score/src/scheduleredfenqueuefirst.c index bcf70b4752..aafc9b4a21 100644 --- a/cpukit/score/src/scheduleredfenqueuefirst.c +++ b/cpukit/score/src/scheduleredfenqueuefirst.c @@ -24,8 +24,8 @@ #include <rtems/score/scheduleredf.h> void _Scheduler_EDF_Enqueue_first( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { _Scheduler_EDF_Enqueue( scheduler, the_thread ); diff --git a/cpukit/score/src/scheduleredfextract.c b/cpukit/score/src/scheduleredfextract.c index ec634e0dfa..02c47afb06 100644 --- a/cpukit/score/src/scheduleredfextract.c +++ b/cpukit/score/src/scheduleredfextract.c @@ -21,16 +21,16 @@ #include <rtems/score/scheduleredfimpl.h> void _Scheduler_EDF_Extract( - Scheduler_Control *scheduler_base, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { - Scheduler_EDF_Control *scheduler = - _Scheduler_EDF_Self_from_base( scheduler_base ); + Scheduler_EDF_Context *context = + _Scheduler_EDF_Get_context( scheduler ); Scheduler_EDF_Per_thread *sched_info = (Scheduler_EDF_Per_thread*) the_thread->scheduler_info; RBTree_Node *node = &(sched_info->Node); - _RBTree_Extract( &scheduler->Ready, node ); + _RBTree_Extract( &context->Ready, node ); sched_info->queue_state = SCHEDULER_EDF_QUEUE_STATE_NOT_PRESENTLY; } diff --git a/cpukit/score/src/scheduleredffree.c b/cpukit/score/src/scheduleredffree.c index d9493cc5ac..3529ac9c41 100644 --- a/cpukit/score/src/scheduleredffree.c +++ b/cpukit/score/src/scheduleredffree.c @@ -26,8 +26,8 @@ #include <rtems/score/wkspace.h> void _Scheduler_EDF_Free( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { (void) scheduler; diff --git a/cpukit/score/src/scheduleredfreleasejob.c b/cpukit/score/src/scheduleredfreleasejob.c index 37ff2d5c06..6c1b642890 100644 --- a/cpukit/score/src/scheduleredfreleasejob.c +++ b/cpukit/score/src/scheduleredfreleasejob.c @@ -23,9 +23,9 @@ #include <rtems/score/watchdogimpl.h> void _Scheduler_EDF_Release_job( - Scheduler_Control *scheduler, - Thread_Control *the_thread, - uint32_t deadline + const Scheduler_Control *scheduler, + Thread_Control *the_thread, + uint32_t deadline ) { Priority_Control new_priority; diff --git a/cpukit/score/src/scheduleredfschedule.c b/cpukit/score/src/scheduleredfschedule.c index f7acde3872..7840eed2dc 100644 --- a/cpukit/score/src/scheduleredfschedule.c +++ b/cpukit/score/src/scheduleredfschedule.c @@ -21,8 +21,8 @@ #include <rtems/score/scheduleredfimpl.h> void _Scheduler_EDF_Schedule( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { _Scheduler_EDF_Schedule_body( scheduler, the_thread, false ); diff --git a/cpukit/score/src/scheduleredfunblock.c b/cpukit/score/src/scheduleredfunblock.c index 0640e8c172..7418b64e6a 100644 --- a/cpukit/score/src/scheduleredfunblock.c +++ b/cpukit/score/src/scheduleredfunblock.c @@ -23,8 +23,8 @@ #include <rtems/score/thread.h> void _Scheduler_EDF_Unblock( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { _Scheduler_EDF_Enqueue( scheduler, the_thread); diff --git a/cpukit/score/src/scheduleredfupdate.c b/cpukit/score/src/scheduleredfupdate.c index 3069068cee..88d6d9d7d4 100644 --- a/cpukit/score/src/scheduleredfupdate.c +++ b/cpukit/score/src/scheduleredfupdate.c @@ -26,8 +26,8 @@ #include <rtems/score/thread.h> void _Scheduler_EDF_Update( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { Scheduler_EDF_Per_thread *sched_info = diff --git a/cpukit/score/src/scheduleredfyield.c b/cpukit/score/src/scheduleredfyield.c index 5b14cade4b..8f8786ad1d 100644 --- a/cpukit/score/src/scheduleredfyield.c +++ b/cpukit/score/src/scheduleredfyield.c @@ -22,12 +22,12 @@ #include <rtems/score/scheduleredfimpl.h> void _Scheduler_EDF_Yield( - Scheduler_Control *scheduler_base, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { - Scheduler_EDF_Control *scheduler = - _Scheduler_EDF_Self_from_base( scheduler_base ); + Scheduler_EDF_Context *context = + _Scheduler_EDF_Get_context( scheduler ); ISR_Level level; Scheduler_EDF_Per_thread *thread_info = @@ -40,12 +40,12 @@ void _Scheduler_EDF_Yield( * The RBTree has more than one node, enqueue behind the tasks * with the same priority in case there are such ones. */ - _RBTree_Extract( &scheduler->Ready, thread_node ); - _RBTree_Insert( &scheduler->Ready, thread_node ); + _RBTree_Extract( &context->Ready, thread_node ); + _RBTree_Insert( &context->Ready, thread_node ); _ISR_Flash( level ); - _Scheduler_EDF_Schedule_body( scheduler_base, the_thread, false ); + _Scheduler_EDF_Schedule_body( scheduler, the_thread, false ); _ISR_Enable( level ); } diff --git a/cpukit/score/src/schedulerpriority.c b/cpukit/score/src/schedulerpriority.c index 9d1755d024..6dc055a536 100644 --- a/cpukit/score/src/schedulerpriority.c +++ b/cpukit/score/src/schedulerpriority.c @@ -21,14 +21,11 @@ #include <rtems/score/schedulerpriorityimpl.h> #include <rtems/score/wkspace.h> -void _Scheduler_priority_Initialize(void) +void _Scheduler_priority_Initialize( const Scheduler_Control *scheduler ) { - Scheduler_priority_Control *self = _Workspace_Allocate_or_fatal_error( - sizeof( *self ) + PRIORITY_MAXIMUM * sizeof( Chain_Control ) - ); + Scheduler_priority_Context *context = + _Scheduler_priority_Get_context( scheduler ); - _Priority_bit_map_Initialize( &self->Bit_map ); - _Scheduler_priority_Ready_queue_initialize( &self->Ready[ 0 ] ); - - _Scheduler.information = self; + _Priority_bit_map_Initialize( &context->Bit_map ); + _Scheduler_priority_Ready_queue_initialize( &context->Ready[ 0 ] ); } diff --git a/cpukit/score/src/schedulerpriorityaffinitysmp.c b/cpukit/score/src/schedulerpriorityaffinitysmp.c index 08b6e825d3..2ab12b4824 100644 --- a/cpukit/score/src/schedulerpriorityaffinitysmp.c +++ b/cpukit/score/src/schedulerpriorityaffinitysmp.c @@ -32,8 +32,8 @@ _Scheduler_priority_affinity_Get_scheduler_info( Thread_Control *thread ) } void * _Scheduler_priority_affinity_SMP_Allocate( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { Scheduler_priority_affinity_SMP_Per_thread *info = @@ -48,10 +48,10 @@ void * _Scheduler_priority_affinity_SMP_Allocate( } bool _Scheduler_priority_affinity_SMP_Get_affinity( - Scheduler_Control *scheduler, - Thread_Control *thread, - size_t cpusetsize, - cpu_set_t *cpuset + const Scheduler_Control *scheduler, + Thread_Control *thread, + size_t cpusetsize, + cpu_set_t *cpuset ) { Scheduler_priority_affinity_SMP_Per_thread *info = @@ -68,10 +68,10 @@ bool _Scheduler_priority_affinity_SMP_Get_affinity( } bool _Scheduler_priority_affinity_SMP_Set_affinity( - Scheduler_Control *scheduler, - Thread_Control *thread, - size_t cpusetsize, - cpu_set_t *cpuset + const Scheduler_Control *scheduler, + Thread_Control *thread, + size_t cpusetsize, + cpu_set_t *cpuset ) { Scheduler_priority_affinity_SMP_Per_thread *info = diff --git a/cpukit/score/src/schedulerpriorityallocate.c b/cpukit/score/src/schedulerpriorityallocate.c index 2225d3ddfc..32feabb97b 100644 --- a/cpukit/score/src/schedulerpriorityallocate.c +++ b/cpukit/score/src/schedulerpriorityallocate.c @@ -23,8 +23,8 @@ #include <rtems/score/wkspace.h> void *_Scheduler_priority_Allocate ( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { Scheduler_priority_Per_thread *sched_info_of_thread = diff --git a/cpukit/score/src/schedulerpriorityblock.c b/cpukit/score/src/schedulerpriorityblock.c index 02d73873ab..ba3c825322 100644 --- a/cpukit/score/src/schedulerpriorityblock.c +++ b/cpukit/score/src/schedulerpriorityblock.c @@ -23,8 +23,8 @@ #include <rtems/score/schedulerpriorityimpl.h> void _Scheduler_priority_Block( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { _Scheduler_Generic_block( diff --git a/cpukit/score/src/schedulerpriorityenqueue.c b/cpukit/score/src/schedulerpriorityenqueue.c index 9d62c2ccee..e3f2be6061 100644 --- a/cpukit/score/src/schedulerpriorityenqueue.c +++ b/cpukit/score/src/schedulerpriorityenqueue.c @@ -21,12 +21,12 @@ #include <rtems/score/schedulerpriorityimpl.h> void _Scheduler_priority_Enqueue( - Scheduler_Control *base, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { - Scheduler_priority_Control *scheduler = - _Scheduler_priority_Self_from_base( base ); + Scheduler_priority_Context *context = + _Scheduler_priority_Get_context( scheduler ); - _Scheduler_priority_Ready_queue_enqueue( the_thread, &scheduler->Bit_map ); + _Scheduler_priority_Ready_queue_enqueue( the_thread, &context->Bit_map ); } diff --git a/cpukit/score/src/schedulerpriorityenqueuefirst.c b/cpukit/score/src/schedulerpriorityenqueuefirst.c index 1f0605d70b..0d197065a0 100644 --- a/cpukit/score/src/schedulerpriorityenqueuefirst.c +++ b/cpukit/score/src/schedulerpriorityenqueuefirst.c @@ -21,16 +21,16 @@ #include <rtems/score/schedulerpriorityimpl.h> void _Scheduler_priority_Enqueue_first( - Scheduler_Control *base, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { - Scheduler_priority_Control *self = - _Scheduler_priority_Self_from_base( base ); + Scheduler_priority_Context *context = + _Scheduler_priority_Get_context( scheduler ); _Scheduler_priority_Ready_queue_enqueue_first( the_thread, - &self->Bit_map + &context->Bit_map ); } diff --git a/cpukit/score/src/schedulerpriorityextract.c b/cpukit/score/src/schedulerpriorityextract.c index 492c537a73..84dbaa4280 100644 --- a/cpukit/score/src/schedulerpriorityextract.c +++ b/cpukit/score/src/schedulerpriorityextract.c @@ -22,9 +22,9 @@ #include <rtems/score/schedulerpriorityimpl.h> void _Scheduler_priority_Extract( - Scheduler_Control *base, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { - _Scheduler_priority_Extract_body( base, the_thread ); + _Scheduler_priority_Extract_body( scheduler, the_thread ); } diff --git a/cpukit/score/src/schedulerpriorityfree.c b/cpukit/score/src/schedulerpriorityfree.c index 5529f78d59..b2daa26493 100644 --- a/cpukit/score/src/schedulerpriorityfree.c +++ b/cpukit/score/src/schedulerpriorityfree.c @@ -25,11 +25,11 @@ #include <rtems/score/wkspace.h> void _Scheduler_priority_Free ( - Scheduler_Control *base, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { - (void) base; + (void) scheduler; _Workspace_Free( the_thread->scheduler_info ); } diff --git a/cpukit/score/src/schedulerpriorityschedule.c b/cpukit/score/src/schedulerpriorityschedule.c index aa6c09a505..ffc1351bba 100644 --- a/cpukit/score/src/schedulerpriorityschedule.c +++ b/cpukit/score/src/schedulerpriorityschedule.c @@ -21,9 +21,9 @@ #include <rtems/score/schedulerpriorityimpl.h> void _Scheduler_priority_Schedule( - Scheduler_Control *base, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { - _Scheduler_priority_Schedule_body( base, the_thread, false ); + _Scheduler_priority_Schedule_body( scheduler, the_thread, false ); } diff --git a/cpukit/score/src/schedulerprioritysmp.c b/cpukit/score/src/schedulerprioritysmp.c index 5361023b4a..025d9601fd 100644 --- a/cpukit/score/src/schedulerprioritysmp.c +++ b/cpukit/score/src/schedulerprioritysmp.c @@ -29,40 +29,37 @@ #include <rtems/score/schedulersmpimpl.h> #include <rtems/score/wkspace.h> -static Scheduler_priority_SMP_Control * -_Scheduler_priority_SMP_Self_from_base( Scheduler_Control *base ) +static Scheduler_priority_SMP_Context * +_Scheduler_priority_SMP_Get_context( const Scheduler_Control *scheduler ) { - return (Scheduler_priority_SMP_Control *) base->information; + return (Scheduler_priority_SMP_Context *) scheduler->context; } -static Scheduler_priority_SMP_Control * -_Scheduler_priority_SMP_Self_from_SMP_base( Scheduler_SMP_Control *smp_base ) +static Scheduler_priority_SMP_Context * +_Scheduler_priority_SMP_Self_from_SMP_base( Scheduler_SMP_Context *smp_base ) { - return (Scheduler_priority_SMP_Control *) + return (Scheduler_priority_SMP_Context *) ( (char *) smp_base - - offsetof( Scheduler_priority_SMP_Control, Base ) ); + - offsetof( Scheduler_priority_SMP_Context, Base ) ); } -void _Scheduler_priority_SMP_Initialize( void ) +void _Scheduler_priority_SMP_Initialize( const Scheduler_Control *scheduler ) { - Scheduler_priority_SMP_Control *self = _Workspace_Allocate_or_fatal_error( - sizeof( *self ) + PRIORITY_MAXIMUM * sizeof( Chain_Control ) - ); + Scheduler_priority_SMP_Context *self = + _Scheduler_priority_SMP_Get_context( scheduler ); _Scheduler_SMP_Initialize( &self->Base ); _Priority_bit_map_Initialize( &self->Bit_map ); _Scheduler_priority_Ready_queue_initialize( &self->Ready[ 0 ] ); - - _Scheduler.information = self; } void _Scheduler_priority_SMP_Update( - Scheduler_Control *base, + const Scheduler_Control *scheduler, Thread_Control *thread ) { - Scheduler_priority_SMP_Control *self = - _Scheduler_priority_SMP_Self_from_base( base ); + Scheduler_priority_SMP_Context *self = + _Scheduler_priority_SMP_Get_context( scheduler ); _Scheduler_priority_Update_body( thread, @@ -72,10 +69,10 @@ void _Scheduler_priority_SMP_Update( } static Thread_Control *_Scheduler_priority_SMP_Get_highest_ready( - Scheduler_SMP_Control *smp_base + Scheduler_SMP_Context *smp_base ) { - Scheduler_priority_SMP_Control *self = + Scheduler_priority_SMP_Context *self = _Scheduler_priority_SMP_Self_from_SMP_base( smp_base ); Thread_Control *highest_ready = NULL; @@ -90,11 +87,11 @@ static Thread_Control *_Scheduler_priority_SMP_Get_highest_ready( } static void _Scheduler_priority_SMP_Move_from_scheduled_to_ready( - Scheduler_SMP_Control *smp_base, + Scheduler_SMP_Context *smp_base, Thread_Control *scheduled_to_ready ) { - Scheduler_priority_SMP_Control *self = + Scheduler_priority_SMP_Context *self = _Scheduler_priority_SMP_Self_from_SMP_base( smp_base ); _Chain_Extract_unprotected( &scheduled_to_ready->Object.Node ); @@ -105,11 +102,11 @@ static void _Scheduler_priority_SMP_Move_from_scheduled_to_ready( } static void _Scheduler_priority_SMP_Move_from_ready_to_scheduled( - Scheduler_SMP_Control *smp_base, + Scheduler_SMP_Context *smp_base, Thread_Control *ready_to_scheduled ) { - Scheduler_priority_SMP_Control *self = + Scheduler_priority_SMP_Context *self = _Scheduler_priority_SMP_Self_from_SMP_base( smp_base ); _Scheduler_priority_Ready_queue_extract( @@ -123,33 +120,33 @@ static void _Scheduler_priority_SMP_Move_from_ready_to_scheduled( } static void _Scheduler_priority_SMP_Insert_ready_lifo( - Scheduler_SMP_Control *smp_base, + Scheduler_SMP_Context *smp_base, Thread_Control *thread ) { - Scheduler_priority_SMP_Control *self = + Scheduler_priority_SMP_Context *self = _Scheduler_priority_SMP_Self_from_SMP_base( smp_base ); _Scheduler_priority_Ready_queue_enqueue( thread, &self->Bit_map ); } static void _Scheduler_priority_SMP_Insert_ready_fifo( - Scheduler_SMP_Control *smp_base, + Scheduler_SMP_Context *smp_base, Thread_Control *thread ) { - Scheduler_priority_SMP_Control *self = + Scheduler_priority_SMP_Context *self = _Scheduler_priority_SMP_Self_from_SMP_base( smp_base ); _Scheduler_priority_Ready_queue_enqueue_first( thread, &self->Bit_map ); } static void _Scheduler_priority_SMP_Do_extract( - Scheduler_SMP_Control *smp_base, + Scheduler_SMP_Context *smp_base, Thread_Control *thread ) { - Scheduler_priority_SMP_Control *self = + Scheduler_priority_SMP_Context *self = _Scheduler_priority_SMP_Self_from_SMP_base( smp_base ); bool is_scheduled = thread->is_scheduled; @@ -164,12 +161,12 @@ static void _Scheduler_priority_SMP_Do_extract( } void _Scheduler_priority_SMP_Block( - Scheduler_Control *base, + const Scheduler_Control *scheduler, Thread_Control *thread ) { - Scheduler_priority_SMP_Control *self = - _Scheduler_priority_SMP_Self_from_base( base ); + Scheduler_priority_SMP_Context *self = + _Scheduler_priority_SMP_Get_context( scheduler ); _Scheduler_SMP_Block( &self->Base, @@ -181,7 +178,7 @@ void _Scheduler_priority_SMP_Block( } static void _Scheduler_priority_SMP_Enqueue_ordered( - Scheduler_SMP_Control *self, + Scheduler_SMP_Context *self, Thread_Control *thread, Chain_Node_order order, Scheduler_SMP_Insert insert_ready, @@ -201,12 +198,12 @@ static void _Scheduler_priority_SMP_Enqueue_ordered( } void _Scheduler_priority_SMP_Enqueue_lifo( - Scheduler_Control *base, + const Scheduler_Control *scheduler, Thread_Control *thread ) { - Scheduler_priority_SMP_Control *self = - _Scheduler_priority_SMP_Self_from_base( base ); + Scheduler_priority_SMP_Context *self = + _Scheduler_priority_SMP_Get_context( scheduler ); _Scheduler_priority_SMP_Enqueue_ordered( &self->Base, @@ -218,12 +215,12 @@ void _Scheduler_priority_SMP_Enqueue_lifo( } void _Scheduler_priority_SMP_Enqueue_fifo( - Scheduler_Control *base, + const Scheduler_Control *scheduler, Thread_Control *thread ) { - Scheduler_priority_SMP_Control *self = - _Scheduler_priority_SMP_Self_from_base( base ); + Scheduler_priority_SMP_Context *self = + _Scheduler_priority_SMP_Get_context( scheduler ); _Scheduler_priority_SMP_Enqueue_ordered( &self->Base, @@ -235,12 +232,12 @@ void _Scheduler_priority_SMP_Enqueue_fifo( } void _Scheduler_priority_SMP_Extract( - Scheduler_Control *base, + const Scheduler_Control *scheduler, Thread_Control *thread ) { - Scheduler_priority_SMP_Control *self = - _Scheduler_priority_SMP_Self_from_base( base ); + Scheduler_priority_SMP_Context *self = + _Scheduler_priority_SMP_Get_context( scheduler ); _Scheduler_SMP_Extract( &self->Base, @@ -250,7 +247,7 @@ void _Scheduler_priority_SMP_Extract( } void _Scheduler_priority_SMP_Yield( - Scheduler_Control *base, + const Scheduler_Control *scheduler, Thread_Control *thread ) { @@ -258,19 +255,19 @@ void _Scheduler_priority_SMP_Yield( _ISR_Disable( level ); - _Scheduler_priority_SMP_Extract( base, thread ); - _Scheduler_priority_SMP_Enqueue_fifo( base, thread ); + _Scheduler_priority_SMP_Extract( scheduler, thread ); + _Scheduler_priority_SMP_Enqueue_fifo( scheduler, thread ); _ISR_Enable( level ); } void _Scheduler_priority_SMP_Schedule( - Scheduler_Control *base, + const Scheduler_Control *scheduler, Thread_Control *thread ) { - Scheduler_priority_SMP_Control *self = - _Scheduler_priority_SMP_Self_from_base( base ); + Scheduler_priority_SMP_Context *self = + _Scheduler_priority_SMP_Get_context( scheduler ); _Scheduler_SMP_Schedule( &self->Base, @@ -281,13 +278,13 @@ void _Scheduler_priority_SMP_Schedule( } void _Scheduler_priority_SMP_Start_idle( - Scheduler_Control *base, + const Scheduler_Control *scheduler, Thread_Control *thread, Per_CPU_Control *cpu ) { - Scheduler_priority_SMP_Control *self = - _Scheduler_priority_SMP_Self_from_base( base ); + Scheduler_priority_SMP_Context *self = + _Scheduler_priority_SMP_Get_context( scheduler ); _Scheduler_SMP_Start_idle( &self->Base, thread, cpu ); } diff --git a/cpukit/score/src/schedulerpriorityunblock.c b/cpukit/score/src/schedulerpriorityunblock.c index c84111ca26..f5482a8229 100644 --- a/cpukit/score/src/schedulerpriorityunblock.c +++ b/cpukit/score/src/schedulerpriorityunblock.c @@ -23,14 +23,14 @@ #include <rtems/score/schedulerpriorityimpl.h> void _Scheduler_priority_Unblock ( - Scheduler_Control *base, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { - Scheduler_priority_Control *self = - _Scheduler_priority_Self_from_base( base ); + Scheduler_priority_Context *context = + _Scheduler_priority_Get_context( scheduler ); - _Scheduler_priority_Ready_queue_enqueue( the_thread, &self->Bit_map ); + _Scheduler_priority_Ready_queue_enqueue( the_thread, &context->Bit_map ); /* TODO: flash critical section? */ diff --git a/cpukit/score/src/schedulerpriorityupdate.c b/cpukit/score/src/schedulerpriorityupdate.c index 0e7032af71..c906c346b4 100644 --- a/cpukit/score/src/schedulerpriorityupdate.c +++ b/cpukit/score/src/schedulerpriorityupdate.c @@ -21,16 +21,16 @@ #include <rtems/score/schedulerpriorityimpl.h> void _Scheduler_priority_Update( - Scheduler_Control *base, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { - Scheduler_priority_Control *self = - _Scheduler_priority_Self_from_base( base ); + Scheduler_priority_Context *context = + _Scheduler_priority_Get_context( scheduler ); _Scheduler_priority_Update_body( the_thread, - &self->Bit_map, - &self->Ready[ 0 ] + &context->Bit_map, + &context->Ready[ 0 ] ); } diff --git a/cpukit/score/src/schedulerpriorityyield.c b/cpukit/score/src/schedulerpriorityyield.c index 2bcefa5eb7..63b344ace7 100644 --- a/cpukit/score/src/schedulerpriorityyield.c +++ b/cpukit/score/src/schedulerpriorityyield.c @@ -23,8 +23,8 @@ #include <rtems/score/threadimpl.h> void _Scheduler_priority_Yield( - Scheduler_Control *base, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { Scheduler_priority_Per_thread *sched_info_of_thread = @@ -32,7 +32,7 @@ void _Scheduler_priority_Yield( Chain_Control *ready_chain = sched_info_of_thread->ready_chain; ISR_Level level; - (void) base; + (void) scheduler; _ISR_Disable( level ); if ( !_Chain_Has_only_one_node( ready_chain ) ) { diff --git a/cpukit/score/src/schedulersimple.c b/cpukit/score/src/schedulersimple.c index b825b29014..38fb194f44 100644 --- a/cpukit/score/src/schedulersimple.c +++ b/cpukit/score/src/schedulersimple.c @@ -19,16 +19,13 @@ #include "config.h" #endif -#include <rtems/score/schedulersimple.h> +#include <rtems/score/schedulersimpleimpl.h> #include <rtems/score/chainimpl.h> -#include <rtems/score/wkspace.h> -void _Scheduler_simple_Initialize ( void ) +void _Scheduler_simple_Initialize( const Scheduler_Control *scheduler ) { - Scheduler_simple_Control *scheduler = - _Workspace_Allocate_or_fatal_error( sizeof( *scheduler ) ); + Scheduler_simple_Context *context = + _Scheduler_simple_Get_context( scheduler ); - _Chain_Initialize_empty( &scheduler->Ready ); - - _Scheduler.information = scheduler; + _Chain_Initialize_empty( &context->Ready ); } diff --git a/cpukit/score/src/schedulersimpleblock.c b/cpukit/score/src/schedulersimpleblock.c index 8bfab69adf..ad409bbf61 100644 --- a/cpukit/score/src/schedulersimpleblock.c +++ b/cpukit/score/src/schedulersimpleblock.c @@ -22,8 +22,8 @@ #include <rtems/score/schedulersimpleimpl.h> void _Scheduler_simple_Block( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { _Scheduler_Generic_block( diff --git a/cpukit/score/src/schedulersimpleenqueue.c b/cpukit/score/src/schedulersimpleenqueue.c index b0d49920c5..5dc88948da 100644 --- a/cpukit/score/src/schedulersimpleenqueue.c +++ b/cpukit/score/src/schedulersimpleenqueue.c @@ -19,15 +19,11 @@ #include "config.h" #endif -#include <rtems/system.h> -#include <rtems/score/chain.h> -#include <rtems/score/isr.h> -#include <rtems/score/thread.h> -#include <rtems/score/schedulersimple.h> +#include <rtems/score/schedulersimpleimpl.h> void _Scheduler_simple_Enqueue( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { _Scheduler_simple_Ready_queue_enqueue( scheduler, the_thread ); diff --git a/cpukit/score/src/schedulersimpleenqueuefirst.c b/cpukit/score/src/schedulersimpleenqueuefirst.c index b9005a778b..2ea0a15917 100644 --- a/cpukit/score/src/schedulersimpleenqueuefirst.c +++ b/cpukit/score/src/schedulersimpleenqueuefirst.c @@ -18,14 +18,11 @@ #include "config.h" #endif -#include <rtems/system.h> -#include <rtems/score/chain.h> -#include <rtems/score/thread.h> #include <rtems/score/schedulersimple.h> void _Scheduler_simple_Enqueue_first( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { _Scheduler_simple_Ready_queue_enqueue_first( scheduler, the_thread ); diff --git a/cpukit/score/src/schedulersimpleextract.c b/cpukit/score/src/schedulersimpleextract.c index 7bb4339ff3..6b89c99881 100644 --- a/cpukit/score/src/schedulersimpleextract.c +++ b/cpukit/score/src/schedulersimpleextract.c @@ -19,13 +19,11 @@ #include "config.h" #endif -#include <rtems/score/schedulersimple.h> -#include <rtems/score/chainimpl.h> -#include <rtems/score/thread.h> +#include <rtems/score/schedulersimpleimpl.h> void _Scheduler_simple_Extract( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { (void) scheduler; diff --git a/cpukit/score/src/schedulersimplereadyqueueenqueue.c b/cpukit/score/src/schedulersimplereadyqueueenqueue.c index 3e06a26b29..8e5f12d6ee 100644 --- a/cpukit/score/src/schedulersimplereadyqueueenqueue.c +++ b/cpukit/score/src/schedulersimplereadyqueueenqueue.c @@ -21,12 +21,12 @@ #include <rtems/score/schedulersimpleimpl.h> void _Scheduler_simple_Ready_queue_enqueue( - Scheduler_Control *scheduler_base, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { - Scheduler_simple_Control *scheduler = - _Scheduler_simple_Self_from_base( scheduler_base ); + Scheduler_simple_Context *context = + _Scheduler_simple_Get_context( scheduler ); - _Scheduler_simple_Insert_priority_fifo( &scheduler->Ready, the_thread ); + _Scheduler_simple_Insert_priority_fifo( &context->Ready, the_thread ); } diff --git a/cpukit/score/src/schedulersimplereadyqueueenqueuefirst.c b/cpukit/score/src/schedulersimplereadyqueueenqueuefirst.c index dd3379fda5..c5f1e68597 100644 --- a/cpukit/score/src/schedulersimplereadyqueueenqueuefirst.c +++ b/cpukit/score/src/schedulersimplereadyqueueenqueuefirst.c @@ -21,12 +21,12 @@ #include <rtems/score/schedulersimpleimpl.h> void _Scheduler_simple_Ready_queue_enqueue_first( - Scheduler_Control *scheduler_base, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { - Scheduler_simple_Control *scheduler = - _Scheduler_simple_Self_from_base( scheduler_base ); + Scheduler_simple_Context *context = + _Scheduler_simple_Get_context( scheduler ); - _Scheduler_simple_Insert_priority_lifo( &scheduler->Ready, the_thread ); + _Scheduler_simple_Insert_priority_lifo( &context->Ready, the_thread ); } diff --git a/cpukit/score/src/schedulersimpleschedule.c b/cpukit/score/src/schedulersimpleschedule.c index d3574b04cc..fcc1398b48 100644 --- a/cpukit/score/src/schedulersimpleschedule.c +++ b/cpukit/score/src/schedulersimpleschedule.c @@ -21,8 +21,8 @@ #include <rtems/score/schedulersimpleimpl.h> void _Scheduler_simple_Schedule( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { _Scheduler_simple_Schedule_body( scheduler, the_thread, false ); diff --git a/cpukit/score/src/schedulersimplesmp.c b/cpukit/score/src/schedulersimplesmp.c index 20a35af07a..5448d5d3de 100644 --- a/cpukit/score/src/schedulersimplesmp.c +++ b/cpukit/score/src/schedulersimplesmp.c @@ -22,35 +22,33 @@ #include <rtems/score/schedulersmpimpl.h> #include <rtems/score/wkspace.h> -static Scheduler_simple_SMP_Control * -_Scheduler_simple_SMP_Self_from_base( Scheduler_Control *base ) +static Scheduler_simple_SMP_Context * +_Scheduler_simple_SMP_Get_context( const Scheduler_Control *scheduler ) { - return (Scheduler_simple_SMP_Control *) base->information; + return (Scheduler_simple_SMP_Context *) scheduler->context; } -static Scheduler_simple_SMP_Control * -_Scheduler_simple_SMP_Self_from_SMP_base( Scheduler_SMP_Control *smp_base ) +static Scheduler_simple_SMP_Context * +_Scheduler_simple_SMP_Self_from_SMP_base( Scheduler_SMP_Context *smp_base ) { - return (Scheduler_simple_SMP_Control *) - ( (char *) smp_base - offsetof( Scheduler_simple_SMP_Control, Base ) ); + return (Scheduler_simple_SMP_Context *) + ( (char *) smp_base - offsetof( Scheduler_simple_SMP_Context, Base ) ); } -void _Scheduler_simple_smp_Initialize( void ) +void _Scheduler_simple_smp_Initialize( const Scheduler_Control *scheduler ) { - Scheduler_simple_SMP_Control *self = - _Workspace_Allocate_or_fatal_error( sizeof( *self ) ); + Scheduler_simple_SMP_Context *self = + _Scheduler_simple_SMP_Get_context( scheduler ); _Scheduler_SMP_Initialize( &self->Base ); _Chain_Initialize_empty( &self->Ready ); - - _Scheduler.information = self; } static Thread_Control *_Scheduler_simple_smp_Get_highest_ready( - Scheduler_SMP_Control *smp_base + Scheduler_SMP_Context *smp_base ) { - Scheduler_simple_SMP_Control *self = + Scheduler_simple_SMP_Context *self = _Scheduler_simple_SMP_Self_from_SMP_base( smp_base ); Thread_Control *highest_ready = NULL; Chain_Control *ready = &self->Ready; @@ -63,11 +61,11 @@ static Thread_Control *_Scheduler_simple_smp_Get_highest_ready( } static void _Scheduler_simple_smp_Move_from_scheduled_to_ready( - Scheduler_SMP_Control *smp_base, + Scheduler_SMP_Context *smp_base, Thread_Control *scheduled_to_ready ) { - Scheduler_simple_SMP_Control *self = + Scheduler_simple_SMP_Context *self = _Scheduler_simple_SMP_Self_from_SMP_base( smp_base ); _Chain_Extract_unprotected( &scheduled_to_ready->Object.Node ); @@ -78,7 +76,7 @@ static void _Scheduler_simple_smp_Move_from_scheduled_to_ready( } static void _Scheduler_simple_smp_Move_from_ready_to_scheduled( - Scheduler_SMP_Control *smp_base, + Scheduler_SMP_Context *smp_base, Thread_Control *ready_to_scheduled ) { @@ -90,11 +88,11 @@ static void _Scheduler_simple_smp_Move_from_ready_to_scheduled( } static void _Scheduler_simple_smp_Insert_ready_lifo( - Scheduler_SMP_Control *smp_base, + Scheduler_SMP_Context *smp_base, Thread_Control *thread ) { - Scheduler_simple_SMP_Control *self = + Scheduler_simple_SMP_Context *self = _Scheduler_simple_SMP_Self_from_SMP_base( smp_base ); _Chain_Insert_ordered_unprotected( @@ -105,11 +103,11 @@ static void _Scheduler_simple_smp_Insert_ready_lifo( } static void _Scheduler_simple_smp_Insert_ready_fifo( - Scheduler_SMP_Control *smp_base, + Scheduler_SMP_Context *smp_base, Thread_Control *thread ) { - Scheduler_simple_SMP_Control *self = + Scheduler_simple_SMP_Context *self = _Scheduler_simple_SMP_Self_from_SMP_base( smp_base ); _Chain_Insert_ordered_unprotected( @@ -120,7 +118,7 @@ static void _Scheduler_simple_smp_Insert_ready_fifo( } static void _Scheduler_simple_smp_Do_extract( - Scheduler_SMP_Control *smp_base, + Scheduler_SMP_Context *smp_base, Thread_Control *thread ) { @@ -133,12 +131,12 @@ static void _Scheduler_simple_smp_Do_extract( } void _Scheduler_simple_smp_Block( - Scheduler_Control *base, + const Scheduler_Control *scheduler, Thread_Control *thread ) { - Scheduler_simple_SMP_Control *self = - _Scheduler_simple_SMP_Self_from_base( base ); + Scheduler_simple_SMP_Context *self = + _Scheduler_simple_SMP_Get_context( scheduler ); _Scheduler_SMP_Block( &self->Base, @@ -150,7 +148,7 @@ void _Scheduler_simple_smp_Block( } static void _Scheduler_simple_smp_Enqueue_ordered( - Scheduler_SMP_Control *smp_base, + Scheduler_SMP_Context *smp_base, Thread_Control *thread, Chain_Node_order order, Scheduler_SMP_Insert insert_ready, @@ -170,12 +168,12 @@ static void _Scheduler_simple_smp_Enqueue_ordered( } void _Scheduler_simple_smp_Enqueue_priority_lifo( - Scheduler_Control *base, + const Scheduler_Control *scheduler, Thread_Control *thread ) { - Scheduler_simple_SMP_Control *self = - _Scheduler_simple_SMP_Self_from_base( base ); + Scheduler_simple_SMP_Context *self = + _Scheduler_simple_SMP_Get_context( scheduler ); _Scheduler_simple_smp_Enqueue_ordered( &self->Base, @@ -187,12 +185,12 @@ void _Scheduler_simple_smp_Enqueue_priority_lifo( } void _Scheduler_simple_smp_Enqueue_priority_fifo( - Scheduler_Control *base, + const Scheduler_Control *scheduler, Thread_Control *thread ) { - Scheduler_simple_SMP_Control *self = - _Scheduler_simple_SMP_Self_from_base( base ); + Scheduler_simple_SMP_Context *self = + _Scheduler_simple_SMP_Get_context( scheduler ); _Scheduler_simple_smp_Enqueue_ordered( &self->Base, @@ -204,12 +202,12 @@ void _Scheduler_simple_smp_Enqueue_priority_fifo( } void _Scheduler_simple_smp_Extract( - Scheduler_Control *base, + const Scheduler_Control *scheduler, Thread_Control *thread ) { - Scheduler_simple_SMP_Control *self = - _Scheduler_simple_SMP_Self_from_base( base ); + Scheduler_simple_SMP_Context *self = + _Scheduler_simple_SMP_Get_context( scheduler ); _Scheduler_SMP_Extract( &self->Base, @@ -219,7 +217,7 @@ void _Scheduler_simple_smp_Extract( } void _Scheduler_simple_smp_Yield( - Scheduler_Control *base, + const Scheduler_Control *scheduler, Thread_Control *thread ) { @@ -227,19 +225,19 @@ void _Scheduler_simple_smp_Yield( _ISR_Disable( level ); - _Scheduler_simple_smp_Extract( base, thread ); - _Scheduler_simple_smp_Enqueue_priority_fifo( base, thread ); + _Scheduler_simple_smp_Extract( scheduler, thread ); + _Scheduler_simple_smp_Enqueue_priority_fifo( scheduler, thread ); _ISR_Enable( level ); } void _Scheduler_simple_smp_Schedule( - Scheduler_Control *base, + const Scheduler_Control *scheduler, Thread_Control *thread ) { - Scheduler_simple_SMP_Control *self = - _Scheduler_simple_SMP_Self_from_base( base ); + Scheduler_simple_SMP_Context *self = + _Scheduler_simple_SMP_Get_context( scheduler ); _Scheduler_SMP_Schedule( &self->Base, @@ -250,13 +248,13 @@ void _Scheduler_simple_smp_Schedule( } void _Scheduler_simple_smp_Start_idle( - Scheduler_Control *base, + const Scheduler_Control *scheduler, Thread_Control *thread, Per_CPU_Control *cpu ) { - Scheduler_simple_SMP_Control *self = - _Scheduler_simple_SMP_Self_from_base( base ); + Scheduler_simple_SMP_Context *self = + _Scheduler_simple_SMP_Get_context( scheduler ); _Scheduler_SMP_Start_idle( &self->Base, thread, cpu ); } diff --git a/cpukit/score/src/schedulersimpleunblock.c b/cpukit/score/src/schedulersimpleunblock.c index c669a9b616..3a9528fba5 100644 --- a/cpukit/score/src/schedulersimpleunblock.c +++ b/cpukit/score/src/schedulersimpleunblock.c @@ -18,14 +18,12 @@ #include "config.h" #endif -#include <rtems/system.h> -#include <rtems/score/isr.h> -#include <rtems/score/schedulersimple.h> +#include <rtems/score/schedulersimpleimpl.h> #include <rtems/score/thread.h> void _Scheduler_simple_Unblock( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { _Scheduler_simple_Ready_queue_enqueue( scheduler, the_thread ); diff --git a/cpukit/score/src/schedulersimpleyield.c b/cpukit/score/src/schedulersimpleyield.c index 664fa31c76..ea41892ad0 100644 --- a/cpukit/score/src/schedulersimpleyield.c +++ b/cpukit/score/src/schedulersimpleyield.c @@ -20,11 +20,10 @@ #include <rtems/score/schedulersimpleimpl.h> #include <rtems/score/isr.h> -#include <rtems/score/threadimpl.h> void _Scheduler_simple_Yield( - Scheduler_Control *scheduler, - Thread_Control *the_thread + const Scheduler_Control *scheduler, + Thread_Control *the_thread ) { ISR_Level level; diff --git a/cpukit/score/src/threadchangepriority.c b/cpukit/score/src/threadchangepriority.c index fab0c9e850..68eb3e89fa 100644 --- a/cpukit/score/src/threadchangepriority.c +++ b/cpukit/score/src/threadchangepriority.c @@ -29,9 +29,9 @@ void _Thread_Change_priority( bool prepend_it ) { - Scheduler_Control *scheduler = _Scheduler_Get( the_thread ); - ISR_Level level; - States_Control state, original_state; + const Scheduler_Control *scheduler = _Scheduler_Get( the_thread ); + ISR_Level level; + States_Control state, original_state; /* * Save original state diff --git a/cpukit/score/src/threadrestart.c b/cpukit/score/src/threadrestart.c index fcf9d6ce3e..47c27929dd 100644 --- a/cpukit/score/src/threadrestart.c +++ b/cpukit/score/src/threadrestart.c @@ -216,9 +216,9 @@ void _Thread_Life_action_handler( } static void _Thread_Start_life_change( - Thread_Control *the_thread, - Scheduler_Control *scheduler, - Priority_Control priority + Thread_Control *the_thread, + const Scheduler_Control *scheduler, + Priority_Control priority ) { the_thread->is_preemptible = the_thread->Start.is_preemptible; @@ -245,7 +245,7 @@ static void _Thread_Request_life_change( Thread_Life_state previous_life_state; Per_CPU_Control *cpu; ISR_Level level; - Scheduler_Control *scheduler; + const Scheduler_Control *scheduler; cpu = _Thread_Action_ISR_disable_and_acquire( the_thread, &level ); previous_life_state = the_thread->Life.state; |