diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-03-28 09:24:28 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-03-31 08:29:42 +0200 |
commit | c2225d735662f9d79bde7967418237b190dcb22b (patch) | |
tree | 2d7c05e68aa532ae4cd6ccbef56e473537a66896 | |
parent | score: Add _Scheduler_Highest_priority_of_two() (diff) | |
download | rtems-c2225d735662f9d79bde7967418237b190dcb22b.tar.bz2 |
score: Add _Scheduler_Change_priority_if_higher()
Add _Scheduler_Set_priority_if_higher().
-rw-r--r-- | cpukit/score/include/rtems/score/schedulerimpl.h | 33 | ||||
-rw-r--r-- | cpukit/score/src/coremutexseize.c | 14 |
2 files changed, 38 insertions, 9 deletions
diff --git a/cpukit/score/include/rtems/score/schedulerimpl.h b/cpukit/score/include/rtems/score/schedulerimpl.h index e70e466426..a031715a6b 100644 --- a/cpukit/score/include/rtems/score/schedulerimpl.h +++ b/cpukit/score/include/rtems/score/schedulerimpl.h @@ -304,6 +304,39 @@ RTEMS_INLINE_ROUTINE Priority_Control _Scheduler_Highest_priority_of_two( return _Scheduler_Is_priority_higher_than( p1, p2 ) ? p1 : p2; } +/** + * @brief Sets the thread priority to @a priority if it is higher than the + * current priority of the thread in the intuitive sense of priority. + */ +RTEMS_INLINE_ROUTINE void _Scheduler_Set_priority_if_higher( + Thread_Control *the_thread, + Priority_Control priority +) +{ + Priority_Control current = the_thread->current_priority; + + if ( _Scheduler_Is_priority_higher_than( priority, current ) ) { + _Thread_Set_priority( the_thread, priority ); + } +} + +/** + * @brief Changes the thread priority to @a priority if it is higher than the + * current priority of the thread in the intuitive sense of priority. + */ +RTEMS_INLINE_ROUTINE void _Scheduler_Change_priority_if_higher( + Thread_Control *the_thread, + Priority_Control priority, + bool prepend_it +) +{ + Priority_Control current = the_thread->current_priority; + + if ( _Scheduler_Is_priority_higher_than( priority, current ) ) { + _Thread_Change_priority( the_thread, priority, prepend_it ); + } +} + /** @} */ #ifdef __cplusplus diff --git a/cpukit/score/src/coremutexseize.c b/cpukit/score/src/coremutexseize.c index 5997293bf2..d6e817c4e2 100644 --- a/cpukit/score/src/coremutexseize.c +++ b/cpukit/score/src/coremutexseize.c @@ -53,15 +53,11 @@ void _CORE_mutex_Seize_interrupt_blocking( { if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ) { - if ( _Scheduler_Is_priority_higher_than( - executing->current_priority, - the_mutex->holder->current_priority)) { - _Thread_Change_priority( - the_mutex->holder, - executing->current_priority, - false - ); - } + _Scheduler_Change_priority_if_higher( + the_mutex->holder, + executing->current_priority, + false + ); } the_mutex->blocked_count++; |