summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-03-30 11:39:58 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-04-06 09:08:20 +0200
commit9809d6e08264525ea58839b98e6d90121b841196 (patch)
tree7ccbdd61436c18d1e1bae9033a3907afb5bff629 /cpukit
parentscore: Fix _Thread_queue_Extract_locked() (diff)
downloadrtems-9809d6e08264525ea58839b98e6d90121b841196.tar.bz2
score: _Thread_queue_Flush() parameter changes
Change _Thread_queue_Flush() into a macro that invokes _Thread_queue_Do_flush() with the parameter set defined by RTEMS_MULTIPROCESSING. For multiprocessing configurations add the object identifier to avoid direct use of the thread wait information. Use mp_ prefix for multiprocessing related parameters. Rename Thread_queue_Flush_callout to Thread_queue_MP_callout since this type will be re-used later for other operations as well.
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/posix/src/mqueuedeletesupp.c3
-rw-r--r--cpukit/posix/src/mutexdestroy.c2
-rw-r--r--cpukit/posix/src/semaphoredeletesupp.c10
-rw-r--r--cpukit/rtems/include/rtems/rtems/msgmp.h3
-rw-r--r--cpukit/rtems/include/rtems/rtems/semmp.h3
-rw-r--r--cpukit/rtems/src/barrierdelete.c3
-rw-r--r--cpukit/rtems/src/msgmp.c5
-rw-r--r--cpukit/rtems/src/msgqdelete.c9
-rw-r--r--cpukit/rtems/src/semdelete.c16
-rw-r--r--cpukit/rtems/src/semflush.c16
-rw-r--r--cpukit/rtems/src/semmp.c5
-rw-r--r--cpukit/score/Makefile.am2
-rw-r--r--cpukit/score/include/rtems/score/corebarrierimpl.h24
-rw-r--r--cpukit/score/include/rtems/score/coremsgimpl.h45
-rw-r--r--cpukit/score/include/rtems/score/coremuteximpl.h31
-rw-r--r--cpukit/score/include/rtems/score/corerwlockimpl.h16
-rw-r--r--cpukit/score/include/rtems/score/coresemimpl.h42
-rw-r--r--cpukit/score/include/rtems/score/threadqimpl.h81
-rw-r--r--cpukit/score/src/coremsgclose.c13
-rw-r--r--cpukit/score/src/coremutexflush.c38
-rw-r--r--cpukit/score/src/threadqflush.c12
21 files changed, 186 insertions, 193 deletions
diff --git a/cpukit/posix/src/mqueuedeletesupp.c b/cpukit/posix/src/mqueuedeletesupp.c
index 9bf17a38dc..30b8b7d6e3 100644
--- a/cpukit/posix/src/mqueuedeletesupp.c
+++ b/cpukit/posix/src/mqueuedeletesupp.c
@@ -59,8 +59,9 @@ void _POSIX_Message_queue_Delete(
_CORE_message_queue_Close(
&the_mq->Message_queue,
+ CORE_MESSAGE_QUEUE_STATUS_WAS_DELETED,
NULL, /* no MP support */
- CORE_MESSAGE_QUEUE_STATUS_WAS_DELETED
+ 0
);
_POSIX_Message_queue_Free( the_mq );
diff --git a/cpukit/posix/src/mutexdestroy.c b/cpukit/posix/src/mutexdestroy.c
index 9ff3dba9f5..fb5aee63f9 100644
--- a/cpukit/posix/src/mutexdestroy.c
+++ b/cpukit/posix/src/mutexdestroy.c
@@ -55,7 +55,7 @@ int pthread_mutex_destroy(
}
_Objects_Close( &_POSIX_Mutex_Information, &the_mutex->Object );
- _CORE_mutex_Flush( &the_mutex->Mutex, NULL, EINVAL );
+ _CORE_mutex_Flush( &the_mutex->Mutex, EINVAL, NULL, 0 );
_Objects_Put( &the_mutex->Object );
_POSIX_Mutex_Free( the_mutex );
_Objects_Allocator_unlock();
diff --git a/cpukit/posix/src/semaphoredeletesupp.c b/cpukit/posix/src/semaphoredeletesupp.c
index d9cf1d3cb7..650cdcdcdd 100644
--- a/cpukit/posix/src/semaphoredeletesupp.c
+++ b/cpukit/posix/src/semaphoredeletesupp.c
@@ -35,14 +35,8 @@ void _POSIX_Semaphore_Delete(
)
{
if ( !the_semaphore->linked && !the_semaphore->open_count ) {
- _Objects_Close( &_POSIX_Semaphore_Information, &the_semaphore->Object );
-
- _CORE_semaphore_Flush(
- &the_semaphore->Semaphore,
- NULL,
- -1
- );
-
+ _Objects_Close( &_POSIX_Semaphore_Information, &the_semaphore->Object );
+ _CORE_semaphore_Flush( &the_semaphore->Semaphore, -1, NULL, 0 );
_POSIX_Semaphore_Free( the_semaphore );
}
}
diff --git a/cpukit/rtems/include/rtems/rtems/msgmp.h b/cpukit/rtems/include/rtems/rtems/msgmp.h
index f3c31f23fb..436e287497 100644
--- a/cpukit/rtems/include/rtems/rtems/msgmp.h
+++ b/cpukit/rtems/include/rtems/rtems/msgmp.h
@@ -152,7 +152,8 @@ void _Message_queue_MP_Process_packet (
* the remote node must be informed of this.
*/
void _Message_queue_MP_Send_object_was_deleted (
- Thread_Control *the_proxy
+ Thread_Control *the_proxy,
+ Objects_Id mp_id
);
/**
diff --git a/cpukit/rtems/include/rtems/rtems/semmp.h b/cpukit/rtems/include/rtems/rtems/semmp.h
index 9c9a1e653d..74f9400d5d 100644
--- a/cpukit/rtems/include/rtems/rtems/semmp.h
+++ b/cpukit/rtems/include/rtems/rtems/semmp.h
@@ -121,7 +121,8 @@ void _Semaphore_MP_Process_packet (
* the remote node must be informed of this.
*/
void _Semaphore_MP_Send_object_was_deleted (
- Thread_Control *the_proxy
+ Thread_Control *the_proxy,
+ Objects_Id mp_id
);
/**
diff --git a/cpukit/rtems/src/barrierdelete.c b/cpukit/rtems/src/barrierdelete.c
index 2ea15502b3..9ddfe01145 100644
--- a/cpukit/rtems/src/barrierdelete.c
+++ b/cpukit/rtems/src/barrierdelete.c
@@ -35,8 +35,9 @@ rtems_status_code rtems_barrier_delete(
case OBJECTS_LOCAL:
_CORE_barrier_Flush(
&the_barrier->Barrier,
+ CORE_BARRIER_WAS_DELETED,
NULL,
- CORE_BARRIER_WAS_DELETED
+ id
);
_Objects_Close( &_Barrier_Information, &the_barrier->Object );
diff --git a/cpukit/rtems/src/msgmp.c b/cpukit/rtems/src/msgmp.c
index 53077c4863..3f27068ad8 100644
--- a/cpukit/rtems/src/msgmp.c
+++ b/cpukit/rtems/src/msgmp.c
@@ -435,14 +435,15 @@ void _Message_queue_MP_Process_packet (
*/
void _Message_queue_MP_Send_object_was_deleted (
- Thread_Control *the_proxy
+ Thread_Control *the_proxy,
+ Objects_Id mp_id
)
{
the_proxy->receive_packet->return_code = RTEMS_OBJECT_WAS_DELETED;
_Message_queue_MP_Send_response_packet(
MESSAGE_QUEUE_MP_RECEIVE_RESPONSE,
- the_proxy->Wait.id,
+ mp_id,
the_proxy
);
}
diff --git a/cpukit/rtems/src/msgqdelete.c b/cpukit/rtems/src/msgqdelete.c
index e2df2b9d9a..d6e773d99f 100644
--- a/cpukit/rtems/src/msgqdelete.c
+++ b/cpukit/rtems/src/msgqdelete.c
@@ -47,12 +47,9 @@ rtems_status_code rtems_message_queue_delete(
_CORE_message_queue_Close(
&the_message_queue->message_queue,
- #if defined(RTEMS_MULTIPROCESSING)
- _Message_queue_MP_Send_object_was_deleted,
- #else
- NULL,
- #endif
- CORE_MESSAGE_QUEUE_STATUS_WAS_DELETED
+ CORE_MESSAGE_QUEUE_STATUS_WAS_DELETED,
+ _Message_queue_MP_Send_object_was_deleted,
+ id
);
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/semdelete.c b/cpukit/rtems/src/semdelete.c
index e9c3ad21e9..6a83d25390 100644
--- a/cpukit/rtems/src/semdelete.c
+++ b/cpukit/rtems/src/semdelete.c
@@ -31,12 +31,6 @@
#include <rtems/score/interr.h>
-#if defined(RTEMS_MULTIPROCESSING)
-#define SEMAPHORE_MP_OBJECT_WAS_DELETED _Semaphore_MP_Send_object_was_deleted
-#else
-#define SEMAPHORE_MP_OBJECT_WAS_DELETED NULL
-#endif
-
rtems_status_code rtems_semaphore_delete(
rtems_id id
)
@@ -73,15 +67,17 @@ rtems_status_code rtems_semaphore_delete(
}
_CORE_mutex_Flush(
&the_semaphore->Core_control.mutex,
- SEMAPHORE_MP_OBJECT_WAS_DELETED,
- CORE_MUTEX_WAS_DELETED
+ CORE_MUTEX_WAS_DELETED,
+ _Semaphore_MP_Send_object_was_deleted,
+ id
);
_CORE_mutex_Destroy( &the_semaphore->Core_control.mutex );
} else {
_CORE_semaphore_Flush(
&the_semaphore->Core_control.semaphore,
- SEMAPHORE_MP_OBJECT_WAS_DELETED,
- CORE_SEMAPHORE_WAS_DELETED
+ CORE_SEMAPHORE_WAS_DELETED,
+ _Semaphore_MP_Send_object_was_deleted,
+ id
);
_CORE_semaphore_Destroy( &the_semaphore->Core_control.semaphore );
}
diff --git a/cpukit/rtems/src/semflush.c b/cpukit/rtems/src/semflush.c
index b9b1ec6992..ea06883379 100644
--- a/cpukit/rtems/src/semflush.c
+++ b/cpukit/rtems/src/semflush.c
@@ -31,12 +31,6 @@
#include <rtems/score/interr.h>
-#if defined(RTEMS_MULTIPROCESSING)
-#define SEND_OBJECT_WAS_DELETED _Semaphore_MP_Send_object_was_deleted
-#else
-#define SEND_OBJECT_WAS_DELETED NULL
-#endif
-
rtems_status_code rtems_semaphore_flush(
rtems_id id
)
@@ -59,14 +53,16 @@ rtems_status_code rtems_semaphore_flush(
if ( !_Attributes_Is_counting_semaphore( attribute_set ) ) {
_CORE_mutex_Flush(
&the_semaphore->Core_control.mutex,
- SEND_OBJECT_WAS_DELETED,
- CORE_MUTEX_STATUS_UNSATISFIED_NOWAIT
+ CORE_MUTEX_STATUS_UNSATISFIED_NOWAIT,
+ _Semaphore_MP_Send_object_was_deleted,
+ id
);
} else {
_CORE_semaphore_Flush(
&the_semaphore->Core_control.semaphore,
- SEND_OBJECT_WAS_DELETED,
- CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT
+ CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT,
+ _Semaphore_MP_Send_object_was_deleted,
+ id
);
}
_Objects_Put( &the_semaphore->Object );
diff --git a/cpukit/rtems/src/semmp.c b/cpukit/rtems/src/semmp.c
index 90432c1738..752831e59b 100644
--- a/cpukit/rtems/src/semmp.c
+++ b/cpukit/rtems/src/semmp.c
@@ -233,14 +233,15 @@ void _Semaphore_MP_Process_packet (
}
void _Semaphore_MP_Send_object_was_deleted (
- Thread_Control *the_proxy
+ Thread_Control *the_proxy,
+ Objects_Id mp_id
)
{
the_proxy->receive_packet->return_code = RTEMS_OBJECT_WAS_DELETED;
_Semaphore_MP_Send_response_packet(
SEMAPHORE_MP_OBTAIN_RESPONSE,
- the_proxy->Wait.id,
+ mp_id,
the_proxy
);
diff --git a/cpukit/score/Makefile.am b/cpukit/score/Makefile.am
index 5d5f6880af..eb5bfa39cd 100644
--- a/cpukit/score/Makefile.am
+++ b/cpukit/score/Makefile.am
@@ -175,7 +175,7 @@ libscore_a_SOURCES += src/coremsg.c src/coremsgbroadcast.c \
src/coremsgsubmit.c
## CORE_MUTEX_C_FILES
-libscore_a_SOURCES += src/coremutex.c src/coremutexflush.c \
+libscore_a_SOURCES += src/coremutex.c \
src/coremutexseize.c src/coremutexsurrender.c \
src/coremutexseizeintr.c
diff --git a/cpukit/score/include/rtems/score/corebarrierimpl.h b/cpukit/score/include/rtems/score/corebarrierimpl.h
index 87ea545747..7e1c0ab31a 100644
--- a/cpukit/score/include/rtems/score/corebarrierimpl.h
+++ b/cpukit/score/include/rtems/score/corebarrierimpl.h
@@ -140,21 +140,19 @@ uint32_t _CORE_barrier_Release(
CORE_barrier_API_mp_support_callout api_barrier_mp_support
);
-/**
- * This routine assists in the deletion of a barrier by flushing the
- * associated wait queue.
- *
- * @param[in] _the_barrier is the barrier to flush
- * @param[in] _remote_extract_callout is the routine to invoke if the
- * thread unblocked is remote
- * @param[in] _status is the status to be returned to the unblocked thread
- */
-#define _CORE_barrier_Flush( _the_barrier, _remote_extract_callout, _status) \
+/* Must be a macro due to the multiprocessing dependent parameters */
+#define _CORE_barrier_Flush( \
+ the_barrier, \
+ status, \
+ mp_callout, \
+ mp_id \
+) \
_Thread_queue_Flush( \
- &((_the_barrier)->Wait_queue), \
+ &( the_barrier )->Wait_queue, \
CORE_BARRIER_TQ_OPERATIONS, \
- (_remote_extract_callout), \
- (_status) \
+ status, \
+ mp_callout, \
+ mp_id \
)
/**
diff --git a/cpukit/score/include/rtems/score/coremsgimpl.h b/cpukit/score/include/rtems/score/coremsgimpl.h
index 407d3aee15..5b7abb2594 100644
--- a/cpukit/score/include/rtems/score/coremsgimpl.h
+++ b/cpukit/score/include/rtems/score/coremsgimpl.h
@@ -139,6 +139,16 @@ bool _CORE_message_queue_Initialize(
size_t maximum_message_size
);
+void _CORE_message_queue_Do_close(
+ CORE_message_queue_Control *the_message_queue,
+ uint32_t status
+#if defined(RTEMS_MULTIPROCESSING)
+ ,
+ Thread_queue_MP_callout mp_callout,
+ Objects_Id mp_id
+#endif
+);
+
/**
* @brief Close a message queue.
*
@@ -150,16 +160,37 @@ bool _CORE_message_queue_Initialize(
* flushing @a the_message_queue's task wait queue.
*
* @param[in] the_message_queue points to the message queue to close
- * @param[in] remote_extract_callout is the routine to call for each thread
- * that is extracted from the set of waiting threads
* @param[in] status is the status that each waiting thread will return
* from it's blocking service
+ * @param[in] mp_callout is the routine to call for each thread
+ * that is extracted from the set of waiting threads
+ * @param[in] mp_id the object identifier of the message queue object
*/
-void _CORE_message_queue_Close(
- CORE_message_queue_Control *the_message_queue,
- Thread_queue_Flush_callout remote_extract_callout,
- uint32_t status
-);
+#if defined(RTEMS_MULTIPROCESSING)
+ #define _CORE_message_queue_Close( \
+ the_message_queue, \
+ status, \
+ mp_callout, \
+ mp_id \
+ ) \
+ _CORE_message_queue_Do_close( \
+ the_message_queue, \
+ status, \
+ mp_callout, \
+ mp_id \
+ )
+#else
+ #define _CORE_message_queue_Close( \
+ the_message_queue, \
+ status, \
+ mp_callout, \
+ mp_id \
+ ) \
+ _CORE_message_queue_Do_close( \
+ the_message_queue, \
+ status \
+ )
+#endif
/**
* @brief Flush pending messages.
diff --git a/cpukit/score/include/rtems/score/coremuteximpl.h b/cpukit/score/include/rtems/score/coremuteximpl.h
index a1cbb17734..812b6ba9cb 100644
--- a/cpukit/score/include/rtems/score/coremuteximpl.h
+++ b/cpukit/score/include/rtems/score/coremuteximpl.h
@@ -324,23 +324,20 @@ CORE_mutex_Status _CORE_mutex_Surrender(
ISR_lock_Context *lock_context
);
-/**
- * @brief Flush all waiting threads.
- *
- * This routine assists in the deletion of a mutex by flushing the associated
- * wait queue.
- *
- * @param[in] the_mutex is the mutex to flush
- * @param[in] remote_extract_callout is the routine to invoke when a remote
- * thread is extracted
- * @param[in] status is the status value which each unblocked thread will
- * return to its caller.
- */
-void _CORE_mutex_Flush(
- CORE_mutex_Control *the_mutex,
- Thread_queue_Flush_callout remote_extract_callout,
- uint32_t status
-);
+/* Must be a macro due to the multiprocessing dependent parameters */
+#define _CORE_mutex_Flush( \
+ the_mutex, \
+ status, \
+ mp_callout, \
+ mp_id \
+) \
+ _Thread_queue_Flush( \
+ &( the_mutex )->Wait_queue, \
+ ( the_mutex )->operations, \
+ status, \
+ mp_callout, \
+ mp_id \
+ )
/**
* @brief Is mutex locked.
diff --git a/cpukit/score/include/rtems/score/corerwlockimpl.h b/cpukit/score/include/rtems/score/corerwlockimpl.h
index 6d563a56cc..b9803c43c5 100644
--- a/cpukit/score/include/rtems/score/corerwlockimpl.h
+++ b/cpukit/score/include/rtems/score/corerwlockimpl.h
@@ -143,22 +143,6 @@ CORE_RWLock_Status _CORE_RWLock_Release(
);
/**
- * This routine assists in the deletion of a RWLock by flushing the
- * associated wait queue.
- *
- * @param[in] _the_rwlock is the RWLock to flush
- * @param[in] _remote_extract_callout is the routine to invoke if the
- * thread unblocked is remote
- * @param[in] _status is the status to be returned to the unblocked thread
- */
-#define _CORE_RWLock_Flush( _the_rwlock, _remote_extract_callout, _status) \
- _Thread_queue_Flush( \
- &((_the_rwlock)->Wait_queue), \
- (_remote_extract_callout), \
- (_status) \
- )
-
-/**
* This method is used to initialize core rwlock attributes.
*
* @param[in] the_attributes pointer to the attributes to initialize.
diff --git a/cpukit/score/include/rtems/score/coresemimpl.h b/cpukit/score/include/rtems/score/coresemimpl.h
index 46033a8499..bde3e5b493 100644
--- a/cpukit/score/include/rtems/score/coresemimpl.h
+++ b/cpukit/score/include/rtems/score/coresemimpl.h
@@ -167,34 +167,20 @@ RTEMS_INLINE_ROUTINE CORE_semaphore_Status _CORE_semaphore_Surrender(
return status;
}
-/**
- * @brief Core semaphore flush.
- *
- * This package is the implementation of the CORE Semaphore Handler.
- * This core object utilizes standard Dijkstra counting semaphores to provide
- * synchronization and mutual exclusion capabilities.
- *
- * This routine assists in the deletion of a semaphore by flushing the
- * associated wait queue.
- *
- * @param[in] the_semaphore is the semaphore to flush
- * @param[in] remote_extract_callout is the routine to invoke if the
- * thread unblocked is remote
- * @param[in] status is the status to be returned to the unblocked thread
- */
-RTEMS_INLINE_ROUTINE void _CORE_semaphore_Flush(
- CORE_semaphore_Control *the_semaphore,
- Thread_queue_Flush_callout remote_extract_callout,
- uint32_t status
-)
-{
- _Thread_queue_Flush(
- &the_semaphore->Wait_queue,
- the_semaphore->operations,
- remote_extract_callout,
- status
- );
-}
+/* Must be a macro due to the multiprocessing dependent parameters */
+#define _CORE_semaphore_Flush( \
+ the_semaphore, \
+ status, \
+ mp_callout, \
+ mp_id \
+) \
+ _Thread_queue_Flush( \
+ &( the_semaphore )->Wait_queue, \
+ ( the_semaphore )->operations, \
+ status, \
+ mp_callout, \
+ mp_id \
+ )
/**
* This routine returns the current count associated with the semaphore.
diff --git a/cpukit/score/include/rtems/score/threadqimpl.h b/cpukit/score/include/rtems/score/threadqimpl.h
index 82f7dc1796..76f29d37f6 100644
--- a/cpukit/score/include/rtems/score/threadqimpl.h
+++ b/cpukit/score/include/rtems/score/threadqimpl.h
@@ -153,13 +153,20 @@ RTEMS_INLINE_ROUTINE void _Thread_queue_Release(
);
}
+#if defined(RTEMS_MULTIPROCESSING)
/**
- * The following type defines the callout used when a remote task
- * is extracted from a local thread queue.
+ * @brief Multiprocessing (MP) support callout for thread queue operations.
+ *
+ * @param the_proxy The thread proxy of the thread queue operation. A thread
+ * control is actually a thread proxy if and only if
+ * _Objects_Is_local_id( the_proxy->Object.id ) is false.
+ * @param mp_id Object identifier of the object containing the thread queue.
*/
-typedef void ( *Thread_queue_Flush_callout )(
- Thread_Control *
- );
+typedef void ( *Thread_queue_MP_callout )(
+ Thread_Control *the_proxy,
+ Objects_Id mp_id
+);
+#endif
/**
* @brief Gets a pointer to a thread waiting on the_thread_queue.
@@ -439,26 +446,60 @@ Thread_Control *_Thread_queue_First(
const Thread_queue_Operations *operations
);
-/**
- * @brief Unblocks all threads blocked on the_thread_queue.
- *
- * This routine unblocks all threads blocked on the_thread_queue
- * and cancels any associated timeouts.
- *
- * @param[in] the_thread_queue is the pointer to a threadq header
- * @param[in] operations The thread queue operations.
- * @param[in] remote_extract_callout points to a method to invoke to
- * invoke when a remote thread is unblocked
- * @param[in] status is the status which will be returned to
- * all unblocked threads
- */
-void _Thread_queue_Flush(
+void _Thread_queue_Do_flush(
Thread_queue_Control *the_thread_queue,
const Thread_queue_Operations *operations,
- Thread_queue_Flush_callout remote_extract_callout,
uint32_t status
+#if defined(RTEMS_MULTIPROCESSING)
+ ,
+ Thread_queue_MP_callout mp_callout,
+ Objects_Id mp_id
+#endif
);
+/**
+ * @brief Unblocks all threads blocked on the thread queue.
+ *
+ * The thread timers of the threads are cancelled.
+ *
+ * @param the_thread_queue The thread queue.
+ * @param operations The thread queue operations.
+ * @param status The return status for the threads.
+ * @param mp_callout Callout to extract the proxy of a remote thread. This
+ * parameter is only used on multiprocessing configurations.
+ * @param mp_id Object identifier of the object containing the thread queue.
+ * This parameter is only used on multiprocessing configurations.
+ */
+#if defined(RTEMS_MULTIPROCESSING)
+ #define _Thread_queue_Flush( \
+ the_thread_queue, \
+ operations, \
+ status, \
+ mp_callout, \
+ mp_id \
+ ) \
+ _Thread_queue_Do_flush( \
+ the_thread_queue, \
+ operations, \
+ status, \
+ mp_callout, \
+ mp_id \
+ )
+#else
+ #define _Thread_queue_Flush( \
+ the_thread_queue, \
+ operations, \
+ status, \
+ mp_callout, \
+ mp_id \
+ ) \
+ _Thread_queue_Do_flush( \
+ the_thread_queue, \
+ operations, \
+ status \
+ )
+#endif
+
void _Thread_queue_Initialize( Thread_queue_Control *the_thread_queue );
#if defined(RTEMS_SMP) && defined(RTEMS_PROFILING)
diff --git a/cpukit/score/src/coremsgclose.c b/cpukit/score/src/coremsgclose.c
index 60b6c9225b..fd026adfc9 100644
--- a/cpukit/score/src/coremsgclose.c
+++ b/cpukit/score/src/coremsgclose.c
@@ -21,10 +21,14 @@
#include <rtems/score/coremsgimpl.h>
#include <rtems/score/wkspace.h>
-void _CORE_message_queue_Close(
+void _CORE_message_queue_Do_close(
CORE_message_queue_Control *the_message_queue,
- Thread_queue_Flush_callout remote_extract_callout,
uint32_t status
+#if defined(RTEMS_MULTIPROCESSING)
+ ,
+ Thread_queue_MP_callout mp_callout,
+ Objects_Id mp_id
+#endif
)
{
ISR_lock_Context lock_context;
@@ -37,8 +41,9 @@ void _CORE_message_queue_Close(
_Thread_queue_Flush(
&the_message_queue->Wait_queue,
the_message_queue->operations,
- remote_extract_callout,
- status
+ status,
+ mp_callout,
+ mp_id
);
/*
diff --git a/cpukit/score/src/coremutexflush.c b/cpukit/score/src/coremutexflush.c
deleted file mode 100644
index c487652daa..0000000000
--- a/cpukit/score/src/coremutexflush.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * @file
- *
- * @brief Flush all waiting threads
- * @ingroup ScoreMutex
- */
-
-/*
- * 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/system.h>
-#include <rtems/score/isr.h>
-#include <rtems/score/coremuteximpl.h>
-#include <rtems/score/thread.h>
-
-void _CORE_mutex_Flush(
- CORE_mutex_Control *the_mutex,
- Thread_queue_Flush_callout remote_extract_callout,
- uint32_t status
-)
-{
- _Thread_queue_Flush(
- &the_mutex->Wait_queue,
- the_mutex->operations,
- remote_extract_callout,
- status
- );
-}
diff --git a/cpukit/score/src/threadqflush.c b/cpukit/score/src/threadqflush.c
index 13d2a5b1ac..694c7466d1 100644
--- a/cpukit/score/src/threadqflush.c
+++ b/cpukit/score/src/threadqflush.c
@@ -21,15 +21,15 @@
#include <rtems/score/threadqimpl.h>
#include <rtems/score/objectimpl.h>
-void _Thread_queue_Flush(
+void _Thread_queue_Do_flush(
Thread_queue_Control *the_thread_queue,
const Thread_queue_Operations *operations,
+ uint32_t status
#if defined(RTEMS_MULTIPROCESSING)
- Thread_queue_Flush_callout remote_extract_callout,
-#else
- Thread_queue_Flush_callout remote_extract_callout RTEMS_UNUSED,
+ ,
+ Thread_queue_MP_callout mp_callout,
+ Objects_Id mp_id
#endif
- uint32_t status
)
{
ISR_lock_Context lock_context;
@@ -59,7 +59,7 @@ void _Thread_queue_Flush(
#if defined(RTEMS_MULTIPROCESSING)
if ( !_Objects_Is_local_id( the_thread->Object.id ) )
- ( *remote_extract_callout )( the_thread );
+ ( *mp_callout )( the_thread, mp_id );
#endif
_Thread_queue_Acquire( the_thread_queue, &lock_context );