summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-05-15 09:41:20 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-05-15 12:18:49 +0200
commitb4bdbcfe2738c8ca007801f5a281bdda3a947aca (patch)
tree2d790830ae62b513d0d1cdeb92524aeb40ab9664
parentscore: Add and use _Scheduler_SMP_Start_idle() (diff)
downloadrtems-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.am2
-rw-r--r--cpukit/score/include/rtems/score/threadqimpl.h17
-rw-r--r--cpukit/score/src/threadchangepriority.c47
-rw-r--r--cpukit/score/src/threadqrequeue.c58
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 );
- }
-}
-