summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cpukit/score/include/rtems/score/schedulerimpl.h33
-rw-r--r--cpukit/score/src/coremutexseize.c14
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++;