RTEMS 6.1-rc5
Loading...
Searching...
No Matches
Files | Data Structures | Macros | Functions
Earliest Deadline First (EDF) Priority SMP Scheduler

This group contains the Earliest Deadline First (EDF) Priority SMP Scheduler implementation. More...

Files

file  scheduleredfsmp.h
 This header file provides the interfaces of the Earliest Deadline First (EDF) Priority SMP Scheduler.
 
file  scheduleredfsmp.c
 This source file contains the implementation of _Scheduler_EDF_SMP_Add_processor(), _Scheduler_EDF_SMP_Ask_for_help(), _Scheduler_EDF_SMP_Block(), _Scheduler_EDF_SMP_Initialize(), _Scheduler_EDF_SMP_Node_initialize(), _Scheduler_EDF_SMP_Pin(), _Scheduler_EDF_SMP_Reconsider_help_request(), _Scheduler_EDF_SMP_Remove_processor(), _Scheduler_EDF_SMP_Set_affinity(), _Scheduler_EDF_SMP_Start_idle(), _Scheduler_EDF_SMP_Unblock(), _Scheduler_EDF_SMP_Unpin(), _Scheduler_EDF_SMP_Update_priority(), _Scheduler_EDF_SMP_Withdraw_node(), _Scheduler_EDF_SMP_Make_sticky(), _Scheduler_EDF_SMP_Clean_sticky(), and _Scheduler_EDF_SMP_Yield().
 

Data Structures

struct  Scheduler_EDF_SMP_Node
 
struct  Scheduler_EDF_SMP_Ready_queue
 
struct  Scheduler_EDF_SMP_Context
 

Macros

#define SCHEDULER_EDF_SMP_ENTRY_POINTS
 

Functions

void _Scheduler_EDF_SMP_Initialize (const Scheduler_Control *scheduler)
 Initializes the context of the scheduler control.
 
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.
 
void _Scheduler_EDF_SMP_Block (const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
 Blocks the thread.
 
void _Scheduler_EDF_SMP_Unblock (const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
 Unblocks the thread.
 
void _Scheduler_EDF_SMP_Update_priority (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Updates the priority of the node.
 
bool _Scheduler_EDF_SMP_Ask_for_help (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Asks for help operation.
 
void _Scheduler_EDF_SMP_Reconsider_help_request (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Reconsiders help operation.
 
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_Make_sticky (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Makes the node sticky.
 
void _Scheduler_EDF_SMP_Clean_sticky (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Cleans the sticky property from 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.
 
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_Add_processor (const Scheduler_Control *scheduler, Thread_Control *idle)
 Adds processor.
 
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_Yield (const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
 Performs the yield of a thread.
 
void _Scheduler_EDF_SMP_Start_idle (const Scheduler_Control *scheduler, Thread_Control *idle, struct Per_CPU_Control *cpu)
 Starts an idle thread.
 
Status_Control _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.
 

Detailed Description

This group contains the Earliest Deadline First (EDF) Priority SMP Scheduler implementation.

Macro Definition Documentation

◆ SCHEDULER_EDF_SMP_ENTRY_POINTS

#define SCHEDULER_EDF_SMP_ENTRY_POINTS
Value:
{ \
NULL, \
}
void _Scheduler_EDF_Cancel_job(const Scheduler_Control *scheduler, Thread_Control *the_thread, Priority_Node *priority_node, Thread_queue_Context *queue_context)
Cancels a job and removes the thread from the queue context.
Definition: scheduleredfreleasejob.c:98
void _Scheduler_EDF_Release_job(const Scheduler_Control *scheduler, Thread_Control *the_thread, Priority_Node *priority_node, uint64_t deadline, Thread_queue_Context *queue_context)
Releases a EDF job.
Definition: scheduleredfreleasejob.c:61
Priority_Control _Scheduler_EDF_Map_priority(const Scheduler_Control *scheduler, Priority_Control priority)
Gets the mapped priority map of the priority control.
Definition: scheduleredfreleasejob.c:45
Priority_Control _Scheduler_EDF_Unmap_priority(const Scheduler_Control *scheduler, Priority_Control priority)
Gets the unmapped priority map of the priority control.
Definition: scheduleredfreleasejob.c:53
void _Scheduler_EDF_SMP_Yield(const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
Performs the yield of a thread.
Definition: scheduleredfsmp.c:804
void _Scheduler_EDF_SMP_Start_idle(const Scheduler_Control *scheduler, Thread_Control *idle, struct Per_CPU_Control *cpu)
Starts an idle thread.
Definition: scheduleredfsmp.c:837
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.
Definition: scheduleredfsmp.c:121
void _Scheduler_EDF_SMP_Update_priority(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Updates the priority of the node.
Definition: scheduleredfsmp.c:645
void _Scheduler_EDF_SMP_Unpin(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node, struct Per_CPU_Control *cpu)
Unpin thread operation.
Definition: scheduleredfsmp.c:877
void _Scheduler_EDF_SMP_Clean_sticky(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Cleans the sticky property from the node.
Definition: scheduleredfsmp.c:731
void _Scheduler_EDF_SMP_Unblock(const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
Unblocks the thread.
Definition: scheduleredfsmp.c:607
void _Scheduler_EDF_SMP_Initialize(const Scheduler_Control *scheduler)
Initializes the context of the scheduler control.
Definition: scheduleredfsmp.c:111
void _Scheduler_EDF_SMP_Block(const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
Blocks the thread.
Definition: scheduleredfsmp.c:539
Thread_Control * _Scheduler_EDF_SMP_Remove_processor(const Scheduler_Control *scheduler, struct Per_CPU_Control *cpu)
Removes an idle thread from the given cpu.
Definition: scheduleredfsmp.c:786
void _Scheduler_EDF_SMP_Pin(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node, struct Per_CPU_Control *cpu)
Pin thread operation.
Definition: scheduleredfsmp.c:855
bool _Scheduler_EDF_SMP_Ask_for_help(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Asks for help operation.
Definition: scheduleredfsmp.c:666
void _Scheduler_EDF_SMP_Reconsider_help_request(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Reconsiders help operation.
Definition: scheduleredfsmp.c:677
void _Scheduler_EDF_SMP_Add_processor(const Scheduler_Control *scheduler, Thread_Control *idle)
Adds processor.
Definition: scheduleredfsmp.c:770
void _Scheduler_EDF_SMP_Make_sticky(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Makes the node sticky.
Definition: scheduleredfsmp.c:716
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.
Definition: scheduleredfsmp.c:693
Status_Control _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.
Definition: scheduleredfsmp.c:898
void _Scheduler_default_Node_destroy(const Scheduler_Control *scheduler, Scheduler_Node *node)
Does nothing.
Definition: schedulerdefaultnodedestroy.c:45

Function Documentation

◆ _Scheduler_EDF_SMP_Add_processor()

void _Scheduler_EDF_SMP_Add_processor ( const Scheduler_Control scheduler,
Thread_Control idle 
)

Adds processor.

Parameters
[in,out]schedulerThe scheduler instance to add the processor to.
idleThe idle thread of the processor to add.

◆ _Scheduler_EDF_SMP_Ask_for_help()

bool _Scheduler_EDF_SMP_Ask_for_help ( const Scheduler_Control scheduler,
Thread_Control the_thread,
Scheduler_Node node 
)

Asks for help operation.

Parameters
schedulerThe scheduler instance to ask for help.
the_threadThe thread needing help.
nodeThe scheduler node.
Return values
trueAsk for help was successful.
falseAsk for help was not successful.

◆ _Scheduler_EDF_SMP_Block()

void _Scheduler_EDF_SMP_Block ( const Scheduler_Control scheduler,
Thread_Control thread,
Scheduler_Node node 
)

Blocks the thread.

Parameters
schedulerThe scheduler instance.
[in,out]the_threadThe thread to block.
[in,out]nodeThe thread's scheduler node.

◆ _Scheduler_EDF_SMP_Clean_sticky()

void _Scheduler_EDF_SMP_Clean_sticky ( const Scheduler_Control scheduler,
Thread_Control the_thread,
Scheduler_Node node 
)

Cleans the sticky property from the node.

Parameters
scheduleris the scheduler of the node.
[in,out]the_threadis the thread owning the node.
[in,out]nodeis the scheduler node to clean the sticky property.

◆ _Scheduler_EDF_SMP_Initialize()

void _Scheduler_EDF_SMP_Initialize ( const Scheduler_Control scheduler)

Initializes the context of the scheduler control.

Parameters
schedulerThe scheduler control.

◆ _Scheduler_EDF_SMP_Make_sticky()

void _Scheduler_EDF_SMP_Make_sticky ( const Scheduler_Control scheduler,
Thread_Control the_thread,
Scheduler_Node node 
)

Makes the node sticky.

Parameters
scheduleris the scheduler of the node.
[in,out]the_threadis the thread owning the node.
[in,out]nodeis the scheduler node to make sticky.

◆ _Scheduler_EDF_SMP_Node_initialize()

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.

Parameters
schedulerThe scheduler instance.
[out]nodeThe node to initialize.
the_threadThe thread of the scheduler node.
priorityThe priority for the initialization.

◆ _Scheduler_EDF_SMP_Pin()

void _Scheduler_EDF_SMP_Pin ( const Scheduler_Control scheduler,
Thread_Control the_thread,
Scheduler_Node node,
struct Per_CPU_Control cpu 
)

Pin thread operation.

Parameters
schedulerThe scheduler instance of the specified processor.
the_threadThe thread to pin.
nodeThe scheduler node of the thread.
cpuThe processor to pin the thread.

◆ _Scheduler_EDF_SMP_Reconsider_help_request()

void _Scheduler_EDF_SMP_Reconsider_help_request ( const Scheduler_Control scheduler,
Thread_Control the_thread,
Scheduler_Node node 
)

Reconsiders help operation.

Parameters
schedulerThe scheduler instance to reconsider the help request.
the_threadThe thread reconsidering a help request.
nodeThe scheduler node.

◆ _Scheduler_EDF_SMP_Remove_processor()

Thread_Control * _Scheduler_EDF_SMP_Remove_processor ( const Scheduler_Control scheduler,
struct Per_CPU_Control cpu 
)

Removes an idle thread from the given cpu.

Parameters
schedulerThe scheduler instance.
cpuThe cpu control to remove from scheduler.
Returns
The idle thread of the processor.

◆ _Scheduler_EDF_SMP_Set_affinity()

Status_Control _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.

Default implementation of the set affinity scheduler operation.

Parameters
schedulerThis parameter is unused.
threadThis parameter is unused.
nodeThis parameter is unused.
affinityThe new processor affinity set for the thread.
Return values
STATUS_SUCCESSFULThe processor set of the scheduler is a subset of the affinity set.
STATUS_INVALID_NUMBERThe processor set of the scheduler is not a subset of the affinity set.

◆ _Scheduler_EDF_SMP_Start_idle()

void _Scheduler_EDF_SMP_Start_idle ( const Scheduler_Control scheduler,
Thread_Control idle,
struct Per_CPU_Control cpu 
)

Starts an idle thread.

Parameters
schedulerThe scheduler instance.
[in,out]the_threadAn idle thread.
cpuThe cpu for the operation.

◆ _Scheduler_EDF_SMP_Unblock()

void _Scheduler_EDF_SMP_Unblock ( const Scheduler_Control scheduler,
Thread_Control thread,
Scheduler_Node node 
)

Unblocks the thread.

Parameters
schedulerThe scheduler instance.
[in,out]the_threadThe thread to unblock.
[in,out]nodeThe thread's scheduler node.

◆ _Scheduler_EDF_SMP_Unpin()

void _Scheduler_EDF_SMP_Unpin ( const Scheduler_Control scheduler,
Thread_Control the_thread,
Scheduler_Node node,
struct Per_CPU_Control cpu 
)

Unpin thread operation.

Parameters
schedulerThe scheduler instance of the specified processor.
the_threadThe thread to unpin.
nodeThe scheduler node of the thread.
cpuThe processor to unpin the thread.

◆ _Scheduler_EDF_SMP_Update_priority()

void _Scheduler_EDF_SMP_Update_priority ( const Scheduler_Control scheduler,
Thread_Control the_thread,
Scheduler_Node node 
)

Updates the priority of the node.

Parameters
schedulerThe scheduler instance.
the_threadThe thread for the operation.
nodeThe thread's scheduler node.

◆ _Scheduler_EDF_SMP_Withdraw_node()

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.

Parameters
schedulerThe scheduler instance to withdraw the node.
the_threadThe thread using the node.
nodeThe scheduler node to withdraw.
next_stateThe next thread scheduler state in case the node is scheduled.

◆ _Scheduler_EDF_SMP_Yield()

void _Scheduler_EDF_SMP_Yield ( const Scheduler_Control scheduler,
Thread_Control thread,
Scheduler_Node node 
)

Performs the yield of a thread.

Parameters
schedulerThe scheduler instance.
[in,out]the_threadThe thread that performed the yield operation.
nodeThe scheduler node of the_thread.