[rtems commit] score: Make _Thread_queue_Requeue() static
Sebastian Huber
sebh at rtems.org
Thu May 15 11:10:48 UTC 2014
Module: rtems
Branch: master
Commit: b4bdbcfe2738c8ca007801f5a281bdda3a947aca
Changeset: http://git.rtems.org/rtems/commit/?id=b4bdbcfe2738c8ca007801f5a281bdda3a947aca
Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
Date: Thu May 15 09:41:20 2014 +0200
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().
---
cpukit/score/Makefile.am | 2 +-
cpukit/score/include/rtems/score/threadqimpl.h | 17 -------
cpukit/score/src/threadchangepriority.c | 47 +++++++++++++++++++
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 200d11d..7c42602 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 9d24812..91f0938 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 4480b53..8059ab1 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 ee15b3d..0000000
--- 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 );
- }
-}
-
More information about the vc
mailing list