From c2225d735662f9d79bde7967418237b190dcb22b Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 28 Mar 2014 09:24:28 +0100 Subject: score: Add _Scheduler_Change_priority_if_higher() Add _Scheduler_Set_priority_if_higher(). --- cpukit/score/include/rtems/score/schedulerimpl.h | 33 ++++++++++++++++++++++++ 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++; -- cgit v1.2.3