diff options
Diffstat (limited to 'cpukit/rtems/src/tasksetscheduler.c')
-rw-r--r-- | cpukit/rtems/src/tasksetscheduler.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/cpukit/rtems/src/tasksetscheduler.c b/cpukit/rtems/src/tasksetscheduler.c index 36fb46d629..175f235f02 100644 --- a/cpukit/rtems/src/tasksetscheduler.c +++ b/cpukit/rtems/src/tasksetscheduler.c @@ -16,12 +16,14 @@ #include "config.h" #endif -#include <rtems/rtems/tasks.h> +#include <rtems/rtems/tasksimpl.h> +#include <rtems/rtems/statusimpl.h> #include <rtems/score/schedulerimpl.h> rtems_status_code rtems_task_set_scheduler( - rtems_id task_id, - rtems_id scheduler_id + rtems_id task_id, + rtems_id scheduler_id, + rtems_task_priority priority ) { const Scheduler_Control *scheduler; @@ -30,12 +32,19 @@ rtems_status_code rtems_task_set_scheduler( ISR_lock_Context state_lock_context; Per_CPU_Control *cpu_self; void *lock; - bool ok; + bool valid; + Priority_Control core_priority; + Status_Control status; if ( !_Scheduler_Get_by_id( scheduler_id, &scheduler ) ) { return RTEMS_INVALID_ID; } + core_priority = _RTEMS_Priority_To_core( scheduler, priority, &valid ); + if ( !valid ) { + return RTEMS_INVALID_PRIORITY; + } + the_thread = _Thread_Get( task_id, &lock_context ); if ( the_thread == NULL ) { @@ -54,10 +63,10 @@ rtems_status_code rtems_task_set_scheduler( lock = _Thread_Lock_acquire( the_thread, &lock_context ); _Thread_State_acquire_critical( the_thread, &state_lock_context ); - ok = _Scheduler_Set( scheduler, the_thread ); + status = _Scheduler_Set( scheduler, the_thread, core_priority ); _Thread_State_release_critical( the_thread, &state_lock_context ); _Thread_Lock_release( lock, &lock_context ); _Thread_Dispatch_enable( cpu_self ); - return ok ? RTEMS_SUCCESSFUL : RTEMS_INCORRECT_STATE; + return _Status_Get( status ); } |