17 #ifndef _RTEMS_SCORE_SCHEDULEREDFSMP_H 18 #define _RTEMS_SCORE_SCHEDULEREDFSMP_H 91 int64_t generations[ 2 ];
108 #define SCHEDULER_EDF_SMP_ENTRY_POINTS \ 110 _Scheduler_EDF_SMP_Initialize, \ 111 _Scheduler_default_Schedule, \ 112 _Scheduler_EDF_SMP_Yield, \ 113 _Scheduler_EDF_SMP_Block, \ 114 _Scheduler_EDF_SMP_Unblock, \ 115 _Scheduler_EDF_SMP_Update_priority, \ 116 _Scheduler_EDF_Map_priority, \ 117 _Scheduler_EDF_Unmap_priority, \ 118 _Scheduler_EDF_SMP_Ask_for_help, \ 119 _Scheduler_EDF_SMP_Reconsider_help_request, \ 120 _Scheduler_EDF_SMP_Withdraw_node, \ 121 _Scheduler_EDF_SMP_Pin, \ 122 _Scheduler_EDF_SMP_Unpin, \ 123 _Scheduler_EDF_SMP_Add_processor, \ 124 _Scheduler_EDF_SMP_Remove_processor, \ 125 _Scheduler_EDF_SMP_Node_initialize, \ 126 _Scheduler_default_Node_destroy, \ 127 _Scheduler_EDF_Release_job, \ 128 _Scheduler_EDF_Cancel_job, \ 129 _Scheduler_default_Tick, \ 130 _Scheduler_EDF_SMP_Start_idle, \ 131 _Scheduler_EDF_SMP_Set_affinity \ 338 const Processor_mask *affinity
uint8_t ready_queue_index
The ready queue index depending on the processor affinity and pinning of the thread.
Scheduler context specialization for SMP schedulers.
uint8_t pinning_ready_queue_index
Ready queue index according to thread pinning.
Chain_Control Affine_queues
Chain of ready queues with affine threads to determine the highest priority ready thread...
uint64_t Priority_Control
The thread priority control.
void _Scheduler_EDF_SMP_Initialize(const Scheduler_Control *scheduler)
Initializes the context of the scheduler control.
bool _Scheduler_EDF_SMP_Set_affinity(const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node, const Processor_mask *affinity)
Checks if the processor set of the scheduler is the subset of the affinity set.
void _Scheduler_EDF_SMP_Unblock(const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
Unblocks the thread.
Data Related to the Manipulation of Threads for the EDF Scheduler.
void _Scheduler_EDF_SMP_Update_priority(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Updates the priority of the node.
void _Scheduler_EDF_SMP_Pin(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node, struct Per_CPU_Control *cpu)
Pin thread operation.
#define RTEMS_ZERO_LENGTH_ARRAY
This is a constant to declare zero-length arrays.
Thread_Scheduler_state
The thread state with respect to the scheduler.
void _Scheduler_EDF_SMP_Block(const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
Blocks the thread.
Scheduler node specialization for SMP schedulers.
void _Scheduler_EDF_SMP_Yield(const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
Performs the yield of a thread.
int64_t generation
Generation number to ensure FIFO/LIFO order for threads of the same priority across different ready q...
Scheduler_EDF_SMP_Node * scheduled
The scheduled thread of the corresponding processor.
RBTree_Control Queue
The ready threads of the corresponding affinity.
void _Scheduler_EDF_SMP_Withdraw_node(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node, Thread_Scheduler_state next_state)
Withdraws node operation.
void _Scheduler_EDF_SMP_Add_processor(const Scheduler_Control *scheduler, Thread_Control *idle)
Adds processor.
Scheduler node for per-thread data.
void _Scheduler_EDF_SMP_Unpin(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node, struct Per_CPU_Control *cpu)
Unpin thread operation.
void _Scheduler_EDF_SMP_Node_initialize(const Scheduler_Control *scheduler, Scheduler_Node *node, Thread_Control *the_thread, Priority_Control priority)
Initializes the node with the given priority.
Chain_Node Node
Chain node for Scheduler_SMP_Context::Affine_queues.
Thread_Control * _Scheduler_EDF_SMP_Remove_processor(const Scheduler_Control *scheduler, struct Per_CPU_Control *cpu)
Removes an idle thread from the given cpu.
void _Scheduler_EDF_SMP_Reconsider_help_request(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Reconsiders help operation.
Constants and Structures Associated with the Scheduler.
void _Scheduler_EDF_SMP_Start_idle(const Scheduler_Control *scheduler, Thread_Control *idle, struct Per_CPU_Control *cpu)
Starts an idle thread.
uint8_t affinity_ready_queue_index
Ready queue index according to thread affinity.
bool _Scheduler_EDF_SMP_Ask_for_help(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Asks for help operation.