summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-03-28 09:24:28 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-03-31 08:29:42 +0200
commitc2225d735662f9d79bde7967418237b190dcb22b (patch)
tree2d7c05e68aa532ae4cd6ccbef56e473537a66896
parentscore: Add _Scheduler_Highest_priority_of_two() (diff)
downloadrtems-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.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++;