[PATCH] score: Document thread queue operations
Sebastian Huber
sebastian.huber at embedded-brains.de
Thu Sep 2 05:50:04 UTC 2021
---
cpukit/include/rtems/score/threadq.h | 44 ++++++++++++++++++------
cpukit/include/rtems/score/threadqimpl.h | 17 +++++++++
2 files changed, 51 insertions(+), 10 deletions(-)
diff --git a/cpukit/include/rtems/score/threadq.h b/cpukit/include/rtems/score/threadq.h
index 10476888d4..0362f84c98 100644
--- a/cpukit/include/rtems/score/threadq.h
+++ b/cpukit/include/rtems/score/threadq.h
@@ -406,6 +406,7 @@ typedef struct _Thread_queue_Heads {
} Thread_queue_Heads;
struct Thread_queue_Queue {
+#if defined(RTEMS_SMP)
/**
* @brief Lock to protect this thread queue.
*
@@ -418,7 +419,6 @@ struct Thread_queue_Queue {
* @see _Thread_queue_Acquire(), _Thread_queue_Acquire_critical() and
* _Thread_queue_Release().
*/
-#if defined(RTEMS_SMP)
SMP_ticket_lock_Control Lock;
#endif
@@ -517,37 +517,61 @@ typedef Thread_Control *( *Thread_queue_First_operation )(
);
/**
- * @brief Thread queue operations.
+ * @brief The thread queue operations are used to implement the addition and
+ * removal of threads to and from a thread queue and related tasks.
+ *
+ * The standard thread queue operation variants are:
+ *
+ * * ::_Thread_queue_Operations_default
+ *
+ * * ::_Thread_queue_Operations_FIFO
+ *
+ * * ::_Thread_queue_Operations_priority
+ *
+ * * ::_Thread_queue_Operations_priority_inherit
*
* @see _Thread_wait_Set_operations().
*/
struct Thread_queue_Operations {
/**
- * @brief Thread queue priority actions operation.
+ * @brief This operation performs the thread queue priority actions.
+ *
+ * Priority actions are produced and processed during enqueue, extract, and
+ * surrender operations.
*/
Thread_queue_Priority_actions_operation priority_actions;
/**
- * @brief Thread queue enqueue operation.
- *
- * Called by object routines to enqueue the thread.
+ * @brief This operation is used to enqueue the thread on the thread queue.
*/
Thread_queue_Enqueue_operation enqueue;
/**
- * @brief Thread queue extract operation.
+ * @brief This operation is used to extract the thread from the thread queue.
*
- * Called by object routines to extract a thread from a thread queue.
+ * The extract operation is intended for timeouts, thread restarts, and
+ * thread cancellation. The surrender operation should be used to dequeue a
+ * thread from the thread queue.
*/
Thread_queue_Extract_operation extract;
/**
- * @brief Thread queue surrender operation.
+ * @brief This operation is used to dequeue the thread from the thread queue
+ * and optionally surrender the thread queue from a previous owner.
+ *
+ * In addition to the optional surrender, there is a subtle difference
+ * between the extract and dequeue of a thread from a thread queue. In SMP
+ * configurations, FIFO fairness across schedulers for priority queues is
+ * only ensured for the dequeue operation and not for the extract operation.
*/
Thread_queue_Surrender_operation surrender;
/**
- * @brief Thread queue first operation.
+ * @brief This operation returns the first thread on the thread queue.
+ *
+ * This operation shall be called only when the thread queue contains at
+ * least one thread. Use ::Thread_queue_Queue::heads to determine if a
+ * thread queue is empty.
*/
Thread_queue_First_operation first;
};
diff --git a/cpukit/include/rtems/score/threadqimpl.h b/cpukit/include/rtems/score/threadqimpl.h
index 33cdb3058d..5d3edaf9e0 100644
--- a/cpukit/include/rtems/score/threadqimpl.h
+++ b/cpukit/include/rtems/score/threadqimpl.h
@@ -1396,12 +1396,29 @@ typedef struct {
Wait_queue.Queue \
)
+/**
+ * @brief The default thread queue operations are used when a thread is not
+ * enqueued on a thread queue.
+ */
extern const Thread_queue_Operations _Thread_queue_Operations_default;
+/**
+ * @brief The FIFO thread queue operations are used when a thread is enqueued
+ * on a thread queue and provide FIFO ordering of enqueued threads.
+ */
extern const Thread_queue_Operations _Thread_queue_Operations_FIFO;
+/**
+ * @brief The FIFO thread queue operations are used when a thread is enqueued
+ * on a thread queue and provide priority ordering of enqueued threads.
+ */
extern const Thread_queue_Operations _Thread_queue_Operations_priority;
+/**
+ * @brief The FIFO thread queue operations are used when a thread is enqueued
+ * on a thread queue and provide priority ordering of enqueued threads with
+ * support for priority inheritance.
+ */
extern const Thread_queue_Operations _Thread_queue_Operations_priority_inherit;
/**
--
2.26.2
More information about the devel
mailing list