[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