diff options
Diffstat (limited to 'cpukit/score/include/rtems/score/schedulersmp.h')
-rw-r--r-- | cpukit/score/include/rtems/score/schedulersmp.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/cpukit/score/include/rtems/score/schedulersmp.h b/cpukit/score/include/rtems/score/schedulersmp.h index 778a1fb832..ee1b087ff8 100644 --- a/cpukit/score/include/rtems/score/schedulersmp.h +++ b/cpukit/score/include/rtems/score/schedulersmp.h @@ -38,15 +38,81 @@ extern "C" { * @{ */ +/** + * @brief Scheduler context specialization for SMP schedulers. + */ typedef struct { /** * @brief Basic scheduler context. */ Scheduler_Context Base; + /** + * @brief The chain of scheduled nodes. + */ Chain_Control Scheduled; } Scheduler_SMP_Context; +/** + * @brief SMP scheduler node states. + */ +typedef enum { + /** + * @brief This scheduler node is blocked. + * + * A scheduler node is blocked if the corresponding thread is not ready. + */ + SCHEDULER_SMP_NODE_BLOCKED, + + /** + * @brief The scheduler node is scheduled. + * + * A scheduler node is scheduled if the corresponding thread is ready and the + * scheduler allocated a processor for it. A scheduled node is assigned to + * exactly one processor. The sum of scheduled and in the air nodes equals + * the processor count owned by a scheduler instance. + */ + SCHEDULER_SMP_NODE_SCHEDULED, + + /** + * @brief This scheduler node is ready. + * + * A scheduler node is ready if the corresponding thread is ready and the + * scheduler did not allocate a processor for it. + */ + SCHEDULER_SMP_NODE_READY, + + /** + * @brief This scheduler node is in the air. + * + * A scheduled node is in the air if it has an allocated processor and the + * corresponding thread is in a transient state. Such a node is not an + * element of the set of scheduled nodes. The extract operation on a + * scheduled node will produce a scheduler node in the air (see also + * _Thread_Set_transient()). The next enqueue or schedule operation will + * decide what to do based on this state indication. It can either place the + * scheduler node back on the set of scheduled nodes and the thread can keep + * its allocated processor, or it can take the processor away from the thread + * and give the processor to another thread of higher priority. + */ + SCHEDULER_SMP_NODE_IN_THE_AIR +} Scheduler_SMP_Node_state; + +/** + * @brief Scheduler node specialization for SMP schedulers. + */ +typedef struct { + /** + * @brief Basic scheduler node. + */ + Scheduler_Node Base; + + /** + * @brief The state of this node. + */ + Scheduler_SMP_Node_state state; +} Scheduler_SMP_Node; + /** @} */ #ifdef __cplusplus |