diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-10-17 09:20:20 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-10-17 11:10:00 +0200 |
commit | 3f3f42482daa45aff3647f34afb4e2c4eca242cd (patch) | |
tree | ff7e96eddeacf3ea09547d1f7b3b2fb83f9b4e7d /cpukit/posix/src/pthreadsetschedparam.c | |
parent | posix: Move POSIX_API_Control::thread (diff) | |
download | rtems-3f3f42482daa45aff3647f34afb4e2c4eca242cd.tar.bz2 |
posix: Remove POSIX_API_Control::schedparam
Move sporadic server scheduler parameters to
POSIX_API_Control::Sporadic. Remove redundant scheduler priority
parameter.
Update #2514.
Diffstat (limited to 'cpukit/posix/src/pthreadsetschedparam.c')
-rw-r--r-- | cpukit/posix/src/pthreadsetschedparam.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/cpukit/posix/src/pthreadsetschedparam.c b/cpukit/posix/src/pthreadsetschedparam.c index 3bd5bc4f3a..c22d4f59b1 100644 --- a/cpukit/posix/src/pthreadsetschedparam.c +++ b/cpukit/posix/src/pthreadsetschedparam.c @@ -41,28 +41,28 @@ static int _POSIX_Set_sched_param( { const Scheduler_Control *scheduler; POSIX_API_Control *api; + int normal_prio; int low_prio; - int high_prio; bool valid; Priority_Control core_normal_prio; Priority_Control core_low_prio; - if ( policy == SCHED_SPORADIC ) { - low_prio = param->sched_ss_low_priority; - high_prio = param->sched_priority; - } else { - low_prio = param->sched_priority; - high_prio = low_prio; - } + normal_prio = param->sched_priority; scheduler = _Thread_Scheduler_get_home( the_thread ); - core_normal_prio = _POSIX_Priority_To_core( scheduler, low_prio, &valid ); + core_normal_prio = _POSIX_Priority_To_core( scheduler, normal_prio, &valid ); if ( !valid ) { return EINVAL; } - core_low_prio = _POSIX_Priority_To_core( scheduler, high_prio, &valid ); + if ( policy == SCHED_SPORADIC ) { + low_prio = param->sched_ss_low_priority; + } else { + low_prio = normal_prio; + } + + core_low_prio = _POSIX_Priority_To_core( scheduler, low_prio, &valid ); if ( !valid ) { return EINVAL; } @@ -95,13 +95,16 @@ static int _POSIX_Set_sched_param( } api->schedpolicy = policy; - api->schedparam = *param; the_thread->budget_algorithm = budget_algorithm; the_thread->budget_callout = budget_callout; + _Priority_Node_set_priority( &api->Sporadic.Low_priority, core_low_prio ); + api->Sporadic.sched_ss_repl_period = param->sched_ss_repl_period; + api->Sporadic.sched_ss_init_budget = param->sched_ss_init_budget; + api->Sporadic.sched_ss_max_repl = param->sched_ss_max_repl; + if ( policy == SCHED_SPORADIC ) { - _Priority_Node_set_priority( &api->Sporadic.Low_priority, core_low_prio ); _POSIX_Threads_Sporadic_timer_insert( the_thread, api ); } else { the_thread->cpu_time_budget = |