diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-05-15 09:41:20 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-05-15 12:18:49 +0200 |
commit | b4bdbcfe2738c8ca007801f5a281bdda3a947aca (patch) | |
tree | 2d790830ae62b513d0d1cdeb92524aeb40ab9664 | |
parent | score: Add and use _Scheduler_SMP_Start_idle() (diff) | |
download | rtems-b4bdbcfe2738c8ca007801f5a281bdda3a947aca.tar.bz2 |
score: Make _Thread_queue_Requeue() static
This function is only used by _Thread_Change_priority(). Make it static
to avoid the function call overhead in the performance critical function
_Thread_Change_priority().
-rw-r--r-- | cpukit/score/Makefile.am | 2 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/threadqimpl.h | 17 | ||||
-rw-r--r-- | cpukit/score/src/threadchangepriority.c | 47 | ||||
-rw-r--r-- | cpukit/score/src/threadqrequeue.c | 58 |
4 files changed, 48 insertions, 76 deletions
diff --git a/cpukit/score/Makefile.am b/cpukit/score/Makefile.am index 200d11d9c8..7c426025ea 100644 --- a/cpukit/score/Makefile.am +++ b/cpukit/score/Makefile.am @@ -293,7 +293,7 @@ libscore_a_SOURCES += src/threadq.c src/threadqdequeue.c \ src/threadqenqueuepriority.c src/threadqextract.c \ src/threadqextractfifo.c src/threadqextractpriority.c \ src/threadqextractwithproxy.c src/threadqfirst.c src/threadqfirstfifo.c \ - src/threadqfirstpriority.c src/threadqflush.c src/threadqrequeue.c \ + src/threadqfirstpriority.c src/threadqflush.c \ src/threadqprocesstimeout.c src/threadqtimeout.c ## TIMESPEC_C_FILES diff --git a/cpukit/score/include/rtems/score/threadqimpl.h b/cpukit/score/include/rtems/score/threadqimpl.h index 9d248121ac..91f09383f2 100644 --- a/cpukit/score/include/rtems/score/threadqimpl.h +++ b/cpukit/score/include/rtems/score/threadqimpl.h @@ -111,23 +111,6 @@ void _Thread_queue_Enqueue_with_handler( ); /** - * @brief Invoked when a thread changes priority and is blocked. - * - * This routine is invoked when a thread changes priority and is - * blocked on a thread queue. If the queue is priority ordered, - * the_thread is removed from the_thread_queue and reinserted using - * its new priority. This method has no impact on the state of the_thread - * or of any timeouts associated with this blocking. - * - * @param[in] the_thread_queue pointer to a threadq header - * @param[in] the_thread pointer to a thread control block - */ -void _Thread_queue_Requeue( - Thread_queue_Control *the_thread_queue, - Thread_Control *the_thread -); - -/** * @brief Extracts thread from thread queue. * * This routine removes @a the_thread from @a the_thread_queue diff --git a/cpukit/score/src/threadchangepriority.c b/cpukit/score/src/threadchangepriority.c index 4480b536d0..8059ab1678 100644 --- a/cpukit/score/src/threadchangepriority.c +++ b/cpukit/score/src/threadchangepriority.c @@ -23,6 +23,53 @@ #include <rtems/score/schedulerimpl.h> #include <rtems/score/threadqimpl.h> +/** + * @brief Invoked when a thread changes priority and is blocked. + * + * This routine is invoked when a thread changes priority and is + * blocked on a thread queue. If the queue is priority ordered, + * the_thread is removed from the_thread_queue and reinserted using + * its new priority. This method has no impact on the state of the_thread + * or of any timeouts associated with this blocking. + * + * @param[in] the_thread_queue pointer to a threadq header + * @param[in] the_thread pointer to a thread control block + */ +static void _Thread_queue_Requeue( + Thread_queue_Control *the_thread_queue, + Thread_Control *the_thread +) +{ + /* + * Just in case the thread really wasn't blocked on a thread queue + * when we get here. + */ + if ( !the_thread_queue ) + return; + + /* + * If queueing by FIFO, there is nothing to do. This only applies to + * priority blocking discipline. + */ + if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY ) { + Thread_queue_Control *tq = the_thread_queue; + ISR_Level level; + ISR_Level level_ignored; + + _ISR_Disable( level ); + if ( _States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { + _Thread_queue_Enter_critical_section( tq ); + _Thread_queue_Extract_priority_helper( + the_thread, + the_thread->Wait.return_code, + true + ); + (void) _Thread_queue_Enqueue_priority( tq, the_thread, &level_ignored ); + } + _ISR_Enable( level ); + } +} + void _Thread_Change_priority( Thread_Control *the_thread, Priority_Control new_priority, diff --git a/cpukit/score/src/threadqrequeue.c b/cpukit/score/src/threadqrequeue.c deleted file mode 100644 index ee15b3dec7..0000000000 --- a/cpukit/score/src/threadqrequeue.c +++ /dev/null @@ -1,58 +0,0 @@ -/** - * @file - * - * @brief Thread Queue Requeue - * @ingroup ScoreThreadQ - */ - -/* - * COPYRIGHT (c) 1989-2008. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include <rtems/score/threadqimpl.h> -#include <rtems/score/statesimpl.h> - -void _Thread_queue_Requeue( - Thread_queue_Control *the_thread_queue, - Thread_Control *the_thread -) -{ - /* - * Just in case the thread really wasn't blocked on a thread queue - * when we get here. - */ - if ( !the_thread_queue ) - return; - - /* - * If queueing by FIFO, there is nothing to do. This only applies to - * priority blocking discipline. - */ - if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_PRIORITY ) { - Thread_queue_Control *tq = the_thread_queue; - ISR_Level level; - ISR_Level level_ignored; - - _ISR_Disable( level ); - if ( _States_Is_waiting_on_thread_queue( the_thread->current_state ) ) { - _Thread_queue_Enter_critical_section( tq ); - _Thread_queue_Extract_priority_helper( - the_thread, - the_thread->Wait.return_code, - true - ); - (void) _Thread_queue_Enqueue_priority( tq, the_thread, &level_ignored ); - } - _ISR_Enable( level ); - } -} - |