RTEMS 6.1-rc7
Loading...
Searching...
No Matches
Files | Data Structures | Macros | Functions
Deterministic Priority Affinity SMP Scheduler

This group contains the Deterministic Priority Affinity SMP Scheduler implementation. More...

Files

file  schedulerpriorityaffinitysmp.h
 This header file provides the interfaces of the Deterministic Priority Affinity SMP Scheduler.
 
file  schedulerpriorityaffinitysmp.c
 This source file contains the implementation of _Scheduler_priority_affinity_SMP_Add_processor(), _Scheduler_priority_affinity_SMP_Ask_for_help(), _Scheduler_priority_affinity_SMP_Block(), _Scheduler_priority_affinity_SMP_Node_initialize(), _Scheduler_priority_affinity_SMP_Reconsider_help_request(), _Scheduler_priority_affinity_SMP_Remove_processor(), _Scheduler_priority_affinity_SMP_Set_affinity(), _Scheduler_priority_affinity_SMP_Unblock(), _Scheduler_priority_affinity_SMP_Update_priority(), _Scheduler_priority_affinity_SMP_Withdraw_node(), _Scheduler_priority_affinity_SMP_Make_sticky(), and _Scheduler_priority_affinity_SMP_Clean_sticky().
 

Data Structures

struct  Scheduler_priority_affinity_SMP_Node
 Scheduler node specialization for Deterministic Priority Affinity SMP schedulers. More...
 

Macros

#define SCHEDULER_PRIORITY_AFFINITY_SMP_ENTRY_POINTS
 Entry points for the Deterministic Priority Affinity SMP Scheduler.
 

Functions

void _Scheduler_priority_affinity_SMP_Node_initialize (const Scheduler_Control *scheduler, Scheduler_Node *node, Thread_Control *the_thread, Priority_Control priority)
 Initializes per thread scheduler information.
 
void _Scheduler_priority_affinity_SMP_Block (const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
 Blocks a thread.
 
void _Scheduler_priority_affinity_SMP_Yield (const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
 
void _Scheduler_priority_affinity_SMP_Unblock (const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
 Unblocks a thread.
 
void _Scheduler_priority_affinity_SMP_Update_priority (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Updates the priority of the node.
 
bool _Scheduler_priority_affinity_SMP_Ask_for_help (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Asks for help.
 
void _Scheduler_priority_affinity_SMP_Reconsider_help_request (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Reconsiders help.
 
void _Scheduler_priority_affinity_SMP_Withdraw_node (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node, Thread_Scheduler_state next_state)
 Withdraws node.
 
void _Scheduler_priority_affinity_SMP_Make_sticky (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Makes the node sticky.
 
void _Scheduler_priority_affinity_SMP_Clean_sticky (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Cleans the sticky property from the node.
 
void _Scheduler_priority_affinity_SMP_Add_processor (const Scheduler_Control *scheduler, Thread_Control *idle)
 Adds idle to scheduler.
 
Thread_Control_Scheduler_priority_affinity_SMP_Remove_processor (const Scheduler_Control *scheduler, struct Per_CPU_Control *cpu)
 Removes an idle thread from the given cpu.
 
Status_Control _Scheduler_priority_affinity_SMP_Set_affinity (const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node, const Processor_mask *affinity)
 Sets affinity for the priority affinity SMP scheduler.
 

Detailed Description

This group contains the Deterministic Priority Affinity SMP Scheduler implementation.

This is an extension of the Deterministic Priority SMP Scheduler. which is an implementation of the global fixed priority scheduler (G-FP). It adds thread to core affinity support.

Note
This is the first iteration of this scheduler. It currently tracks the requested affinity to exercise the Scheduler Framework but it does not honor that affinity in assigning threads to cores. This will be added in a subsequent revision.

Macro Definition Documentation

◆ SCHEDULER_PRIORITY_AFFINITY_SMP_ENTRY_POINTS

#define SCHEDULER_PRIORITY_AFFINITY_SMP_ENTRY_POINTS
Value:
{ \
_Scheduler_priority_affinity_SMP_Yield, \
_Scheduler_default_Pin_or_unpin_not_supported, \
_Scheduler_default_Pin_or_unpin_not_supported, \
}
Thread_Control * _Scheduler_priority_affinity_SMP_Remove_processor(const Scheduler_Control *scheduler, struct Per_CPU_Control *cpu)
Removes an idle thread from the given cpu.
Definition: schedulerpriorityaffinitysmp.c:604
Status_Control _Scheduler_priority_affinity_SMP_Set_affinity(const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node, const Processor_mask *affinity)
Sets affinity for the priority affinity SMP scheduler.
Definition: schedulerpriorityaffinitysmp.c:641
void _Scheduler_priority_affinity_SMP_Node_initialize(const Scheduler_Control *scheduler, Scheduler_Node *node, Thread_Control *the_thread, Priority_Control priority)
Initializes per thread scheduler information.
Definition: schedulerpriorityaffinitysmp.c:95
void _Scheduler_priority_affinity_SMP_Withdraw_node(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node, Thread_Scheduler_state next_state)
Withdraws node.
Definition: schedulerpriorityaffinitysmp.c:530
void _Scheduler_priority_affinity_SMP_Add_processor(const Scheduler_Control *scheduler, Thread_Control *idle)
Adds idle to scheduler.
Definition: schedulerpriorityaffinitysmp.c:588
bool _Scheduler_priority_affinity_SMP_Ask_for_help(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Asks for help.
Definition: schedulerpriorityaffinitysmp.c:503
void _Scheduler_priority_affinity_SMP_Make_sticky(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Makes the node sticky.
Definition: schedulerpriorityaffinitysmp.c:553
void _Scheduler_priority_affinity_SMP_Block(const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
Blocks a thread.
Definition: schedulerpriorityaffinitysmp.c:197
void _Scheduler_priority_affinity_SMP_Reconsider_help_request(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Reconsiders help.
Definition: schedulerpriorityaffinitysmp.c:514
void _Scheduler_priority_affinity_SMP_Update_priority(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Updates the priority of the node.
Definition: schedulerpriorityaffinitysmp.c:477
void _Scheduler_priority_affinity_SMP_Clean_sticky(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Cleans the sticky property from the node.
Definition: schedulerpriorityaffinitysmp.c:568
void _Scheduler_priority_affinity_SMP_Unblock(const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
Unblocks a thread.
Definition: schedulerpriorityaffinitysmp.c:381
void _Scheduler_priority_SMP_Initialize(const Scheduler_Control *scheduler)
Initializes the priority SMP scheduler.
Definition: schedulerprioritysmp.c:60
void _Scheduler_SMP_Start_idle(const Scheduler_Control *scheduler, Thread_Control *idle, struct Per_CPU_Control *cpu)
Starts an idle thread on the specified cpu.
Definition: schedulersmpstartidle.c:43
void _Scheduler_default_Release_job(const Scheduler_Control *scheduler, Thread_Control *the_thread, Priority_Node *priority_node, uint64_t deadline, Thread_queue_Context *queue_context)
Does nothing.
Definition: schedulerdefaultreleasejob.c:44
void _Scheduler_default_Node_destroy(const Scheduler_Control *scheduler, Scheduler_Node *node)
Does nothing.
Definition: schedulerdefaultnodedestroy.c:45
Priority_Control _Scheduler_default_Map_priority(const Scheduler_Control *scheduler, Priority_Control priority)
Returns the scheduler internal thread priority mapped by SCHEDULER_PRIORITY_MAP().
Definition: schedulerdefaultmappriority.c:43
void _Scheduler_default_Schedule(const Scheduler_Control *scheduler, Thread_Control *the_thread)
Does nothing.
Definition: schedulerdefaultschedule.c:43
Priority_Control _Scheduler_default_Unmap_priority(const Scheduler_Control *scheduler, Priority_Control priority)
Returns the user visible thread priority unmapped by SCHEDULER_PRIORITY_UNMAP().
Definition: schedulerdefaultmappriority.c:51
void _Scheduler_default_Cancel_job(const Scheduler_Control *scheduler, Thread_Control *the_thread, Priority_Node *priority_node, Thread_queue_Context *queue_context)
Does nothing.
Definition: schedulerdefaultreleasejob.c:59

Entry points for the Deterministic Priority Affinity SMP Scheduler.

Function Documentation

◆ _Scheduler_priority_affinity_SMP_Add_processor()

void _Scheduler_priority_affinity_SMP_Add_processor ( const Scheduler_Control scheduler,
Thread_Control idle 
)

Adds idle to scheduler.

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

◆ _Scheduler_priority_affinity_SMP_Ask_for_help()

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

Asks for help.

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_priority_affinity_SMP_Block()

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

Blocks a thread.

Parameters
schedulerThe scheduler instance.
[in,out]Thethread to block.
[in,out]nodeThe scheduler node of the thread.

◆ _Scheduler_priority_affinity_SMP_Clean_sticky()

void _Scheduler_priority_affinity_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_priority_affinity_SMP_Make_sticky()

void _Scheduler_priority_affinity_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_priority_affinity_SMP_Node_initialize()

void _Scheduler_priority_affinity_SMP_Node_initialize ( const Scheduler_Control scheduler,
Scheduler_Node node,
Thread_Control the_thread,
Priority_Control  priority 
)

Initializes per thread scheduler information.

This routine allocates thread->scheduler.

Parameters
schedulerPoints to the scheduler specific information.
[in,out]nodeThe node the scheduler is allocating management memory for.
the_threadThe thread of the node.
priorityThe thread priority.

◆ _Scheduler_priority_affinity_SMP_Reconsider_help_request()

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

Reconsiders help.

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

◆ _Scheduler_priority_affinity_SMP_Remove_processor()

Thread_Control * _Scheduler_priority_affinity_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_priority_affinity_SMP_Set_affinity()

Status_Control _Scheduler_priority_affinity_SMP_Set_affinity ( const Scheduler_Control scheduler,
Thread_Control thread,
Scheduler_Node node,
const Processor_mask *  affinity 
)

Sets affinity for the priority affinity SMP scheduler.

Parameters
schedulerThe scheduler of the thread.
[in,out]threadThe associated thread.
[in,out]nodeThe scheduler node.
affinityThe new affinity set.
Return values
STATUS_SUCCESSFULif successful
STATUS_INVALID_NUMBERif unsuccessful

◆ _Scheduler_priority_affinity_SMP_Unblock()

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

Unblocks a thread.

Parameters
schedulerThe scheduler instance.
[in,out]Thethread to unblock.
[in,out]nodeThe scheduler node of the thread.

◆ _Scheduler_priority_affinity_SMP_Update_priority()

void _Scheduler_priority_affinity_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 of the node.
[in,out]Thenode to update the priority of.

◆ _Scheduler_priority_affinity_SMP_Withdraw_node()

void _Scheduler_priority_affinity_SMP_Withdraw_node ( const Scheduler_Control scheduler,
Thread_Control the_thread,
Scheduler_Node node,
Thread_Scheduler_state  next_state 
)

Withdraws node.

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 the case the node is scheduled.