[PATCH 28/45] score: Inline _CORE_semaphore_Surrender()
Sebastian Huber
sebastian.huber at embedded-brains.de
Fri May 15 11:41:28 UTC 2015
---
cpukit/score/Makefile.am | 3 +-
cpukit/score/include/rtems/score/coresemimpl.h | 41 +++++++++++++++-
cpukit/score/src/coresemsurrender.c | 66 --------------------------
3 files changed, 40 insertions(+), 70 deletions(-)
delete mode 100644 cpukit/score/src/coresemsurrender.c
diff --git a/cpukit/score/Makefile.am b/cpukit/score/Makefile.am
index 58673bb..cede673 100644
--- a/cpukit/score/Makefile.am
+++ b/cpukit/score/Makefile.am
@@ -177,8 +177,7 @@ libscore_a_SOURCES += src/corerwlock.c src/corerwlockobtainread.c \
endif
## CORE_SEMAPHORE_C_FILES
-libscore_a_SOURCES += src/coresem.c \
- src/coresemsurrender.c
+libscore_a_SOURCES += src/coresem.c
## CORE_SPINLOCK_C_FILES
if HAS_PTHREADS
diff --git a/cpukit/score/include/rtems/score/coresemimpl.h b/cpukit/score/include/rtems/score/coresemimpl.h
index f1ac9c6..d231e23 100644
--- a/cpukit/score/include/rtems/score/coresemimpl.h
+++ b/cpukit/score/include/rtems/score/coresemimpl.h
@@ -118,12 +118,49 @@ RTEMS_INLINE_ROUTINE void _CORE_semaphore_Destroy(
*
* @retval an indication of whether the routine succeeded or failed
*/
-CORE_semaphore_Status _CORE_semaphore_Surrender(
+RTEMS_INLINE_ROUTINE CORE_semaphore_Status _CORE_semaphore_Surrender(
CORE_semaphore_Control *the_semaphore,
Objects_Id id,
CORE_semaphore_API_mp_support_callout api_semaphore_mp_support,
ISR_lock_Context *lock_context
-);
+)
+{
+ Thread_Control *the_thread;
+ CORE_semaphore_Status status;
+
+ status = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
+
+ _Thread_queue_Acquire_critical( &the_semaphore->Wait_queue, lock_context );
+
+ the_thread = _Thread_queue_First_locked( &the_semaphore->Wait_queue );
+ if ( the_thread != NULL ) {
+#if defined(RTEMS_MULTIPROCESSING)
+ _Thread_Dispatch_disable_critical();
+#endif
+
+ _Thread_queue_Extract_critical(
+ &the_semaphore->Wait_queue,
+ the_thread,
+ lock_context
+ );
+
+#if defined(RTEMS_MULTIPROCESSING)
+ if ( !_Objects_Is_local_id( the_thread->Object.id ) )
+ (*api_semaphore_mp_support) ( the_thread, id );
+
+ _Thread_Dispatch_enable( _Per_CPU_Get() );
+#endif
+ } else {
+ if ( the_semaphore->count < the_semaphore->Attributes.maximum_count )
+ the_semaphore->count += 1;
+ else
+ status = CORE_SEMAPHORE_MAXIMUM_COUNT_EXCEEDED;
+
+ _Thread_queue_Release( &the_semaphore->Wait_queue, lock_context );
+ }
+
+ return status;
+}
/**
* @brief Core semaphore flush.
diff --git a/cpukit/score/src/coresemsurrender.c b/cpukit/score/src/coresemsurrender.c
deleted file mode 100644
index fbc088f..0000000
--- a/cpukit/score/src/coresemsurrender.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * @file
- *
- * @brief Surrenders a Unit to a Semaphore
- *
- * @ingroup ScoreSemaphore
- */
-
-/*
- * COPYRIGHT (c) 1989-1999.
- * 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/coresemimpl.h>
-
-CORE_semaphore_Status _CORE_semaphore_Surrender(
- CORE_semaphore_Control *the_semaphore,
- Objects_Id id,
- CORE_semaphore_API_mp_support_callout api_semaphore_mp_support,
- ISR_lock_Context *lock_context
-)
-{
- Thread_Control *the_thread;
- CORE_semaphore_Status status;
-
- status = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
-
- _Thread_queue_Acquire_critical( &the_semaphore->Wait_queue, lock_context );
-
- the_thread = _Thread_queue_First_locked( &the_semaphore->Wait_queue );
- if ( the_thread != NULL ) {
-#if defined(RTEMS_MULTIPROCESSING)
- _Thread_Dispatch_disable_critical();
-#endif
-
- _Thread_queue_Extract_critical(
- &the_semaphore->Wait_queue,
- the_thread,
- lock_context
- );
-
-#if defined(RTEMS_MULTIPROCESSING)
- if ( !_Objects_Is_local_id( the_thread->Object.id ) )
- (*api_semaphore_mp_support) ( the_thread, id );
-
- _Thread_Dispatch_enable( _Per_CPU_Get() );
-#endif
- } else {
- if ( the_semaphore->count < the_semaphore->Attributes.maximum_count )
- the_semaphore->count += 1;
- else
- status = CORE_SEMAPHORE_MAXIMUM_COUNT_EXCEEDED;
-
- _Thread_queue_Release( &the_semaphore->Wait_queue, lock_context );
- }
-
- return status;
-}
--
1.8.4.5
More information about the devel
mailing list