diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-11-10 13:48:27 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-11-10 13:48:27 +0000 |
commit | eb02f47b126b56091ffaeaad470a48e2ac6d57b5 (patch) | |
tree | d52c66ad2d1a1b60d4eecd873949aa07477f8b87 /cpukit/itron/src/chg_pri.c | |
parent | Added support for ITRON tests. (diff) | |
download | rtems-eb02f47b126b56091ffaeaad470a48e2ac6d57b5.tar.bz2 |
Committed modifications from ITRON Task and Task Dependendent Synchronization
Working Group. Included are tests.
Diffstat (limited to 'cpukit/itron/src/chg_pri.c')
-rw-r--r-- | cpukit/itron/src/chg_pri.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/cpukit/itron/src/chg_pri.c b/cpukit/itron/src/chg_pri.c index b2d42905e5..412bab054e 100644 --- a/cpukit/itron/src/chg_pri.c +++ b/cpukit/itron/src/chg_pri.c @@ -25,6 +25,44 @@ ER chg_pri( PRI tskpri ) { - return E_OK; + register Thread_Control *the_thread; + Objects_Locations location; + Priority_Control new_priority; + + the_thread = _ITRON_Task_Get( tskid, &location ); + if (!the_thread) + _ITRON_return_errorno( _ITRON_Task_Clarify_get_id_error( tskid ) ); + + if (_States_Is_dormant( the_thread->current_state )) + return -1; + + if (( tskpri <= 0 ) || ( tskpri >= 256 )) + _ITRON_return_errorno( E_PAR ); + + switch ( location ) { + case OBJECTS_REMOTE: + case OBJECTS_ERROR: + _ITRON_return_errorno( _ITRON_Task_Clarify_get_id_error( tskid )); + + case OBJECTS_LOCAL: + new_priority = _ITRON_Task_Priority_to_Core( tskpri ); + the_thread->real_priority = new_priority; + + /* + * XXX This is from the rtems side and I'm not sure what this is for. + * XXX Is this check right or should change priority be called + * regardless? + */ + + if ( the_thread->resource_count == 0 || + the_thread->current_priority > new_priority ) + _Thread_Change_priority( the_thread, new_priority, FALSE ); + + _Thread_Enable_dispatch(); + return E_OK; + } + + return E_OBJ; /* XXX - Should never get here */ } + |