RTEMS  5.1
Modules | Files | Data Structures | Macros | Typedefs | Functions | Variables
Scheduler Handler

Modules

 CBS Scheduler
 CBS Scheduler.
 
 Deterministic Priority Scheduler
 Deterministic Priority Scheduler.
 
 EDF Scheduler
 EDF Scheduler.
 
 SMP Scheduler
 SMP Scheduler.
 
 Simple Priority Scheduler
 Simple Priority Scheduler.
 

Files

file  scheduler.h
 Constants and Structures Associated with the Scheduler.
 
file  schedulerimpl.h
 Inlined Routines Associated with the Manipulation of the Scheduler.
 
file  schedulernode.h
 Handles Scheduler Nodes.
 
file  schedulernodeimpl.h
 Scheduler Node Implementation.
 
file  scheduler.c
 Scheduler Initialize.
 
file  schedulercbs.c
 CBS Scheduler Budget Handler.
 
file  schedulercbsattachthread.c
 Attach Scheduler CBS Thread.
 
file  schedulercbscleanup.c
 Scheduler CBS Cleanup.
 
file  schedulercbscreateserver.c
 Scheduler CBS Create Server.
 
file  schedulercbsdestroyserver.c
 Scheduler CBS Destroy Server.
 
file  schedulercbsdetachthread.c
 Detach from the CBS Server.
 
file  schedulercbsgetapprovedbudget.c
 Scheduler CBS Get Approved Budget.
 
file  schedulercbsgetexecutiontime.c
 Get Thread Execution Info.
 
file  schedulercbsgetparameters.c
 _Scheduler_CBS_Get_parameters
 
file  schedulercbsgetremainingbudget.c
 Scheduler CBS Get Remaining Budget.
 
file  schedulercbsgetserverid.c
 Scheduler CBS Get Server id.
 
file  schedulercbsreleasejob.c
 Scheduler CBS Release Job.
 
file  schedulercbssetparameters.c
 Set Parameters for CBS Scheduling.
 
file  schedulercbsunblock.c
 Unblocks a Thread from the Queue.
 
file  schedulerdefaultnodedestroy.c
 Scheduler Default Node Destruction Operation.
 
file  schedulerdefaultnodeinit.c
 Scheduler Default Node Initialization Operation.
 
file  schedulerdefaultreleasejob.c
 Default Scheduler Release Job Operation.
 
file  schedulerdefaultsetaffinity.c
 Scheduler Default Set Affinity Operation.
 
file  schedulerdefaulttick.c
 Default Scheduler At Tick Handler.
 
file  scheduleredf.c
 Scheduler EDF Initialize and Support.
 
file  scheduleredfblock.c
 Removes the Thread from Ready Queue.
 
file  scheduleredfchangepriority.c
 Scheduler EDF Extract.
 
file  scheduleredfnodeinit.c
 Scheduler EDF Allocate.
 
file  scheduleredfreleasejob.c
 Scheduler EDF Release Job.
 
file  scheduleredfschedule.c
 Scheduler EDF Allocate.
 
file  scheduleredfunblock.c
 Scheduler EDF Unblock.
 
file  scheduleredfyield.c
 Scheduler EDF Yield.
 
file  schedulerpriorityblock.c
 Scheduler Priority Block.
 
file  schedulerprioritychangepriority.c
 Removes Thread from Thread Queue.
 
file  schedulerpriorityschedule.c
 Priority Scheduler Schedule Method.
 
file  schedulerpriorityunblock.c
 Scheduler Priority Unblock.
 
file  schedulerpriorityyield.c
 Scheduler Priority Yield.
 
file  schedulersimple.c
 Scheduler Simple Functions.
 
file  schedulersimpleblock.c
 Simple Scheduler Block a Thread.
 
file  schedulersimplechangepriority.c
 Removes a Thread from the Simple Queue.
 
file  schedulersimpleschedule.c
 Simple Schedule Determine Heir.
 
file  schedulersimpleunblock.c
 Scheduler Simple Handler / Unblock.
 
file  schedulersimpleyield.c
 Simple Schedule Yield CPU.
 

Data Structures

struct  Scheduler_Operations
 The scheduler operations. More...
 
struct  Scheduler_Context
 Scheduler context. More...
 
struct  _Scheduler_Control
 Scheduler control. More...
 
struct  Scheduler_Node
 Scheduler node for per-thread data. More...
 

Macros

#define _Scheduler_Count   ( (size_t) 1 )
 Count of registered schedulers. More...
 
#define SCHEDULER_OPERATION_DEFAULT_ASK_FOR_HELP
 
#define SCHEDULER_OPERATION_DEFAULT_GET_SET_AFFINITY
 
#define PRIORITY_MAXIMUM   ( _Scheduler_Table[ 0 ].maximum_priority )
 This defines the lowest (least important) thread priority of the first scheduler instance.
 
#define SCHEDULER_NODE_OF_WAIT_PRIORITY_NODE(node)   RTEMS_CONTAINER_OF( node, Scheduler_Node, Wait.Priority.Node.Node.Chain )
 
#define SCHEDULER_NODE_OF_WAIT_PRIORITY(node)   RTEMS_CONTAINER_OF( node, Scheduler_Node, Wait.Priority )
 
#define SCHEDULER_PRIORITY_APPEND_FLAG   1
 Priority append indicator for the priority control used for the scheduler node priority.
 
#define SCHEDULER_PRIORITY_MAP(priority)   ( ( priority ) << 1 )
 Maps a priority value to support the append indicator.
 
#define SCHEDULER_PRIORITY_UNMAP(priority)   ( ( priority ) >> 1 )
 Returns the plain priority value.
 
#define SCHEDULER_PRIORITY_PURIFY(priority)   ( ( priority ) & ~( (Priority_Control) SCHEDULER_PRIORITY_APPEND_FLAG ) )
 Clears the priority append indicator bit.
 
#define SCHEDULER_PRIORITY_APPEND(priority)   ( ( priority ) | SCHEDULER_PRIORITY_APPEND_FLAG )
 Returns the priority control with the append indicator bit set.
 
#define SCHEDULER_PRIORITY_IS_APPEND(priority)   ( ( ( priority ) & SCHEDULER_PRIORITY_APPEND_FLAG ) != 0 )
 Returns true, if the item should be appended to its priority group, otherwise returns false and the item should be prepended to its priority group.
 

Typedefs

typedef struct _Scheduler_Control Scheduler_Control
 
typedef struct Scheduler_Context Scheduler_Context
 Scheduler context. More...
 
typedef struct Scheduler_Node Scheduler_Node
 

Functions

Priority_Control _Scheduler_default_Map_priority (const Scheduler_Control *scheduler, Priority_Control priority)
 Returns the scheduler internal thread priority mapped by SCHEDULER_PRIORITY_MAP(). More...
 
Priority_Control _Scheduler_default_Unmap_priority (const Scheduler_Control *scheduler, Priority_Control priority)
 Returns the user visible thread priority unmapped by SCHEDULER_PRIORITY_UNMAP(). More...
 
void _Scheduler_default_Schedule (const Scheduler_Control *scheduler, Thread_Control *the_thread)
 Does nothing. More...
 
void _Scheduler_default_Node_initialize (const Scheduler_Control *scheduler, Scheduler_Node *node, Thread_Control *the_thread, Priority_Control priority)
 Performs the scheduler base node initialization. More...
 
void _Scheduler_default_Node_destroy (const Scheduler_Control *scheduler, Scheduler_Node *node)
 Does nothing. More...
 
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. More...
 
void _Scheduler_default_Cancel_job (const Scheduler_Control *scheduler, Thread_Control *the_thread, Priority_Node *priority_node, Thread_queue_Context *queue_context)
 Does nothing. More...
 
void _Scheduler_default_Tick (const Scheduler_Control *scheduler, Thread_Control *executing)
 Performs tick operations depending on the CPU budget algorithm for each executing thread. More...
 
void _Scheduler_default_Start_idle (const Scheduler_Control *scheduler, Thread_Control *the_thread, struct Per_CPU_Control *cpu)
 Starts an idle thread. More...
 
void _Scheduler_Handler_initialization (void)
 Initializes the scheduler to the policy chosen by the user. More...
 
RTEMS_INLINE_ROUTINE Scheduler_Context_Scheduler_Get_context (const Scheduler_Control *scheduler)
 Gets the context of the scheduler. More...
 
RTEMS_INLINE_ROUTINE const Scheduler_Control_Scheduler_Get_by_CPU (const Per_CPU_Control *cpu)
 Gets the scheduler for the cpu. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_Acquire_critical (const Scheduler_Control *scheduler, ISR_lock_Context *lock_context)
 Acquires the scheduler instance inside a critical section (interrupts disabled). More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_Release_critical (const Scheduler_Control *scheduler, ISR_lock_Context *lock_context)
 Releases the scheduler instance inside a critical section (interrupts disabled). More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_Schedule (Thread_Control *the_thread)
 General scheduling decision. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_Yield (Thread_Control *the_thread)
 Scheduler yield with a particular thread. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_Block (Thread_Control *the_thread)
 Blocks a thread with respect to the scheduler. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_Unblock (Thread_Control *the_thread)
 Unblocks a thread with respect to the scheduler. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_Update_priority (Thread_Control *the_thread)
 Propagates a priority change of a thread to the scheduler. More...
 
RTEMS_INLINE_ROUTINE Priority_Control _Scheduler_Map_priority (const Scheduler_Control *scheduler, Priority_Control priority)
 Maps a thread priority from the user domain to the scheduler domain. More...
 
RTEMS_INLINE_ROUTINE Priority_Control _Scheduler_Unmap_priority (const Scheduler_Control *scheduler, Priority_Control priority)
 Unmaps a thread priority from the scheduler domain to the user domain. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_Node_initialize (const Scheduler_Control *scheduler, Scheduler_Node *node, Thread_Control *the_thread, Priority_Control priority)
 Initializes a scheduler node. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_Node_destroy (const Scheduler_Control *scheduler, Scheduler_Node *node)
 Destroys a scheduler node. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_Release_job (Thread_Control *the_thread, Priority_Node *priority_node, uint64_t deadline, Thread_queue_Context *queue_context)
 Releases a job of a thread with respect to the scheduler. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_Cancel_job (Thread_Control *the_thread, Priority_Node *priority_node, Thread_queue_Context *queue_context)
 Cancels a job of a thread with respect to the scheduler. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_Tick (const Per_CPU_Control *cpu)
 Scheduler method invoked at each clock tick. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_Start_idle (const Scheduler_Control *scheduler, Thread_Control *the_thread, Per_CPU_Control *cpu)
 Starts the idle thread for a particular processor. More...
 
RTEMS_INLINE_ROUTINE bool _Scheduler_Has_processor_ownership (const Scheduler_Control *scheduler, uint32_t cpu_index)
 Checks if the scheduler of the cpu with the given index is equal to the given scheduler. More...
 
RTEMS_INLINE_ROUTINE const Processor_mask * _Scheduler_Get_processors (const Scheduler_Control *scheduler)
 Gets the processors of the scheduler. More...
 
bool _Scheduler_Get_affinity (Thread_Control *the_thread, size_t cpusetsize, cpu_set_t *cpuset)
 Copies the thread's scheduler's affinity to the given cpuset. More...
 
RTEMS_INLINE_ROUTINE bool _Scheduler_default_Set_affinity_body (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node, const Processor_mask *affinity)
 Checks if the affinity is a subset of the online processors. More...
 
bool _Scheduler_Set_affinity (Thread_Control *the_thread, size_t cpusetsize, const cpu_set_t *cpuset)
 Sets the thread's scheduler's affinity. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_Generic_block (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node, void(*extract)(const Scheduler_Control *, Thread_Control *, Scheduler_Node *), void(*schedule)(const Scheduler_Control *, Thread_Control *, bool))
 Blocks the thread. More...
 
RTEMS_INLINE_ROUTINE uint32_t _Scheduler_Get_processor_count (const Scheduler_Control *scheduler)
 Gets the number of processors of the scheduler. More...
 
RTEMS_INLINE_ROUTINE Objects_Id _Scheduler_Build_id (uint32_t scheduler_index)
 Builds an object build id. More...
 
RTEMS_INLINE_ROUTINE uint32_t _Scheduler_Get_index_by_id (Objects_Id id)
 Gets the scheduler index from the given object build id. More...
 
RTEMS_INLINE_ROUTINE const Scheduler_Control_Scheduler_Get_by_id (Objects_Id id)
 Gets the scheduler from the given object build id. More...
 
RTEMS_INLINE_ROUTINE uint32_t _Scheduler_Get_index (const Scheduler_Control *scheduler)
 Gets the index of the scheduler. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_Update_heir (Thread_Control *new_heir, bool force_dispatch)
 Updates the heir. More...
 
RTEMS_INLINE_ROUTINE Status_Control _Scheduler_Set (const Scheduler_Control *new_scheduler, Thread_Control *the_thread, Priority_Control priority)
 Sets a new scheduler. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_Node_do_initialize (const struct _Scheduler_Control *scheduler, Scheduler_Node *node, Thread_Control *the_thread, Priority_Control priority)
 Initializes a node. More...
 
RTEMS_INLINE_ROUTINE const Scheduler_Control_Scheduler_Node_get_scheduler (const Scheduler_Node *node)
 Gets the scheduler of the node. More...
 
RTEMS_INLINE_ROUTINE Thread_Control_Scheduler_Node_get_owner (const Scheduler_Node *node)
 Gets the owner of the node. More...
 
RTEMS_INLINE_ROUTINE Priority_Control _Scheduler_Node_get_priority (Scheduler_Node *node)
 Gets the priority of the node. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_Node_set_priority (Scheduler_Node *node, Priority_Control new_priority, bool prepend_it)
 Sets the priority of the node. More...
 

Variables

const Scheduler_Control _Scheduler_Table []
 Registered schedulers. More...
 

Detailed Description

This handler encapsulates functionality related to managing sets of threads that are ready for execution.

Macro Definition Documentation

◆ _Scheduler_Count

#define _Scheduler_Count   ( (size_t) 1 )

Count of registered schedulers.

Application provided via <rtems/confdefs.h> on SMP configurations.

It is very important that this is a compile-time constant on uni-processor configurations (in this case RTEMS_SMP is not defined) so that the compiler can optimize the some loops away

See also
_Scheduler_Table.

Typedef Documentation

◆ Scheduler_Context

Scheduler context.

The scheduler context of a particular scheduler implementation must place this structure at the begin of its context structure.

Function Documentation

◆ _Scheduler_Acquire_critical()

RTEMS_INLINE_ROUTINE void _Scheduler_Acquire_critical ( const Scheduler_Control scheduler,
ISR_lock_Context lock_context 
)

Acquires the scheduler instance inside a critical section (interrupts disabled).

Parameters
schedulerThe scheduler instance.
lock_contextThe lock context to use for _Scheduler_Release_critical().

◆ _Scheduler_Block()

RTEMS_INLINE_ROUTINE void _Scheduler_Block ( Thread_Control the_thread)

Blocks a thread with respect to the scheduler.

This routine removes the_thread from the scheduling decision for the scheduler. The primary task is to remove the thread from the ready queue. It performs any necessary scheduling operations including the selection of a new heir thread.

Parameters
the_threadThe thread.

◆ _Scheduler_Build_id()

RTEMS_INLINE_ROUTINE Objects_Id _Scheduler_Build_id ( uint32_t  scheduler_index)

Builds an object build id.

Parameters
scheduler_indexThe index to build the build id out of.
Returns
The build id.

◆ _Scheduler_Cancel_job()

RTEMS_INLINE_ROUTINE void _Scheduler_Cancel_job ( Thread_Control the_thread,
Priority_Node priority_node,
Thread_queue_Context queue_context 
)

Cancels a job of a thread with respect to the scheduler.

Parameters
the_threadThe thread.
priority_nodeThe priority node of the job.
queue_contextThe thread queue context to provide the set of threads for _Thread_Priority_update().

◆ _Scheduler_default_Cancel_job()

void _Scheduler_default_Cancel_job ( const Scheduler_Control scheduler,
Thread_Control the_thread,
Priority_Node priority_node,
Thread_queue_Context queue_context 
)

Does nothing.

Parameters
schedulerThis parameter is unused.
the_threadThis parameter is unused.
priority_nodeThis parameter is unused.
queue_contextThis parameter is unused.
Returns
Always returns NULL.

◆ _Scheduler_default_Map_priority()

Priority_Control _Scheduler_default_Map_priority ( const Scheduler_Control scheduler,
Priority_Control  priority 
)

Returns the scheduler internal thread priority mapped by SCHEDULER_PRIORITY_MAP().

Parameters
schedulerUnused.
priorityThe user visible thread priority.
Returns
The scheduler internal thread priority.

◆ _Scheduler_default_Node_destroy()

void _Scheduler_default_Node_destroy ( const Scheduler_Control scheduler,
Scheduler_Node node 
)

Does nothing.

Parameters
schedulerThis parameter is unused.
nodeThis parameter is unused.

◆ _Scheduler_default_Node_initialize()

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

Performs the scheduler base node initialization.

Parameters
schedulerThis parameter is unused.
[out]nodeThe node to initialize.
the_threadThis parameter is unused.
priorityThe thread priority.

◆ _Scheduler_default_Release_job()

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.

Parameters
schedulerThis parameter is unused.
the_threadThis parameter is unused.
priority_nodeThis parameter is unused.
deadlineThis parameter is unused.
queue_contextThis parameter is unused.
Returns
Always returns NULL.

◆ _Scheduler_default_Schedule()

void _Scheduler_default_Schedule ( const Scheduler_Control scheduler,
Thread_Control the_thread 
)

Does nothing.

Parameters
schedulerThis parameter is unused.
the_threadThis parameter is unused.

◆ _Scheduler_default_Set_affinity_body()

RTEMS_INLINE_ROUTINE bool _Scheduler_default_Set_affinity_body ( const Scheduler_Control scheduler,
Thread_Control the_thread,
Scheduler_Node node,
const Processor_mask *  affinity 
)

Checks if the affinity is a subset of the online processors.

Parameters
schedulerThis parameter is unused.
the_threadThis parameter is unused.
nodeThis parameter is unused.
affinityThe processor mask to check.
Return values
trueaffinity is a subset of the online processors.
falseaffinity is not a subset of the online processors.

◆ _Scheduler_default_Start_idle()

void _Scheduler_default_Start_idle ( const Scheduler_Control scheduler,
Thread_Control the_thread,
struct Per_CPU_Control cpu 
)

Starts an idle thread.

Parameters
schedulerThis parameter is unused.
[in,out]the_threadAn idle thread.
cpuThis parameter is unused.

◆ _Scheduler_default_Tick()

void _Scheduler_default_Tick ( const Scheduler_Control scheduler,
Thread_Control executing 
)

Performs tick operations depending on the CPU budget algorithm for each executing thread.

This routine is invoked as part of processing each clock tick.

Parameters
schedulerThe scheduler.
[in,out]executingAn executing thread.

◆ _Scheduler_default_Unmap_priority()

Priority_Control _Scheduler_default_Unmap_priority ( const Scheduler_Control scheduler,
Priority_Control  priority 
)

Returns the user visible thread priority unmapped by SCHEDULER_PRIORITY_UNMAP().

Parameters
schedulerUnused.
priorityThe scheduler internal thread priority.
Returns
priority The user visible thread priority.

◆ _Scheduler_Generic_block()

RTEMS_INLINE_ROUTINE void _Scheduler_Generic_block ( const Scheduler_Control scheduler,
Thread_Control the_thread,
Scheduler_Node node,
void(*)(const Scheduler_Control *, Thread_Control *, Scheduler_Node *)  extract,
void(*)(const Scheduler_Control *, Thread_Control *, bool)  schedule 
)

Blocks the thread.

Parameters
schedulerThe scheduler instance.
the_threadThe thread to block.
nodeThe corresponding scheduler node.
extractMethod to extract the thread.
scheduleMethod for scheduling threads.

◆ _Scheduler_Get_affinity()

bool _Scheduler_Get_affinity ( Thread_Control the_thread,
size_t  cpusetsize,
cpu_set_t *  cpuset 
)

Copies the thread's scheduler's affinity to the given cpuset.

Parameters
the_threadThe thread to get the affinity of its scheduler.
cpusetsizeThe size of cpuset.
[out]cpusetThe cpuset that serves as destination for the copy operation
Return values
trueThe copy operation was lossless.
falseThe copy operation was not lossless

◆ _Scheduler_Get_by_CPU()

RTEMS_INLINE_ROUTINE const Scheduler_Control* _Scheduler_Get_by_CPU ( const Per_CPU_Control cpu)

Gets the scheduler for the cpu.

Parameters
cpuThe cpu control to get the scheduler of.
Returns
The scheduler for the cpu.

◆ _Scheduler_Get_by_id()

RTEMS_INLINE_ROUTINE const Scheduler_Control* _Scheduler_Get_by_id ( Objects_Id  id)

Gets the scheduler from the given object build id.

Parameters
idThe object build id.
Returns
The scheduler to the object id.

◆ _Scheduler_Get_context()

RTEMS_INLINE_ROUTINE Scheduler_Context* _Scheduler_Get_context ( const Scheduler_Control scheduler)

Gets the context of the scheduler.

Parameters
schedulerThe scheduler to get the context of.
Returns
The context of scheduler.

◆ _Scheduler_Get_index()

RTEMS_INLINE_ROUTINE uint32_t _Scheduler_Get_index ( const Scheduler_Control scheduler)

Gets the index of the scheduler.

Parameters
schedulerThe scheduler to get the index of.
Returns
The index of the given scheduler.

◆ _Scheduler_Get_index_by_id()

RTEMS_INLINE_ROUTINE uint32_t _Scheduler_Get_index_by_id ( Objects_Id  id)

Gets the scheduler index from the given object build id.

Parameters
idThe object build id.
Returns
The scheduler index.

◆ _Scheduler_Get_processor_count()

RTEMS_INLINE_ROUTINE uint32_t _Scheduler_Get_processor_count ( const Scheduler_Control scheduler)

Gets the number of processors of the scheduler.

Parameters
schedulerThe scheduler instance to get the number of processors of.
Returns
The number of processors.

◆ _Scheduler_Get_processors()

RTEMS_INLINE_ROUTINE const Processor_mask* _Scheduler_Get_processors ( const Scheduler_Control scheduler)

Gets the processors of the scheduler.

Parameters
schedulerThe scheduler to get the processors of.
Returns
The processors of the context of the given scheduler.

◆ _Scheduler_Handler_initialization()

void _Scheduler_Handler_initialization ( void  )

Initializes the scheduler to the policy chosen by the user.

This routine initializes the scheduler to the policy chosen by the user through confdefs, or to the priority scheduler with ready chains by default.

◆ _Scheduler_Has_processor_ownership()

RTEMS_INLINE_ROUTINE bool _Scheduler_Has_processor_ownership ( const Scheduler_Control scheduler,
uint32_t  cpu_index 
)

Checks if the scheduler of the cpu with the given index is equal to the given scheduler.

Parameters
schedulerThe scheduler for the comparison.
cpu_indexThe index of the cpu for the comparison.
Return values
trueThe scheduler of the cpu is the given scheduler.
falseThe scheduler of the cpu is not the given scheduler.

◆ _Scheduler_Map_priority()

RTEMS_INLINE_ROUTINE Priority_Control _Scheduler_Map_priority ( const Scheduler_Control scheduler,
Priority_Control  priority 
)

Maps a thread priority from the user domain to the scheduler domain.

Let M be the maximum scheduler priority. The mapping must be bijective in the closed interval [0, M], e.g. _Scheduler_Unmap_priority( scheduler, _Scheduler_Map_priority( scheduler, p ) ) == p for all p in [0, M]. For other values the mapping is undefined.

Parameters
schedulerThe scheduler instance.
priorityThe user domain thread priority.
Returns
The corresponding thread priority of the scheduler domain is returned.

◆ _Scheduler_Node_destroy()

RTEMS_INLINE_ROUTINE void _Scheduler_Node_destroy ( const Scheduler_Control scheduler,
Scheduler_Node node 
)

Destroys a scheduler node.

The caller must ensure that _Scheduler_Node_destroy() will be called only after a corresponding _Scheduler_Node_initialize().

Parameters
schedulerThe scheduler instance.
[out]nodeThe scheduler node to destroy.

◆ _Scheduler_Node_do_initialize()

RTEMS_INLINE_ROUTINE void _Scheduler_Node_do_initialize ( const struct _Scheduler_Control scheduler,
Scheduler_Node node,
Thread_Control the_thread,
Priority_Control  priority 
)

Initializes a node.

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

◆ _Scheduler_Node_get_owner()

RTEMS_INLINE_ROUTINE Thread_Control* _Scheduler_Node_get_owner ( const Scheduler_Node node)

Gets the owner of the node.

Parameters
nodeThe node to get the owner of.
Returns
The owner of the node.

◆ _Scheduler_Node_get_priority()

RTEMS_INLINE_ROUTINE Priority_Control _Scheduler_Node_get_priority ( Scheduler_Node node)

Gets the priority of the node.

Parameters
nodeThe node to get the priority of.
Returns
The priority of the node.

◆ _Scheduler_Node_get_scheduler()

RTEMS_INLINE_ROUTINE const Scheduler_Control* _Scheduler_Node_get_scheduler ( const Scheduler_Node node)

Gets the scheduler of the node.

Parameters
nodeThe node to get the scheduler of.
Returns
The scheduler of the node.

◆ _Scheduler_Node_initialize()

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

Initializes a scheduler node.

The scheduler node contains arbitrary data on function entry. The caller must ensure that _Scheduler_Node_destroy() will be called after a _Scheduler_Node_initialize() before the memory of the scheduler node is destroyed.

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

◆ _Scheduler_Node_set_priority()

RTEMS_INLINE_ROUTINE void _Scheduler_Node_set_priority ( Scheduler_Node node,
Priority_Control  new_priority,
bool  prepend_it 
)

Sets the priority of the node.

Parameters
[in,out]nodeThe node to set the priority of.
new_priorityThe new priority for node.
prepend_itIndicates whether the new priority should be prepended.

◆ _Scheduler_Release_critical()

RTEMS_INLINE_ROUTINE void _Scheduler_Release_critical ( const Scheduler_Control scheduler,
ISR_lock_Context lock_context 
)

Releases the scheduler instance inside a critical section (interrupts disabled).

Parameters
schedulerThe scheduler instance.
lock_contextThe lock context used for _Scheduler_Acquire_critical().

◆ _Scheduler_Release_job()

RTEMS_INLINE_ROUTINE void _Scheduler_Release_job ( Thread_Control the_thread,
Priority_Node priority_node,
uint64_t  deadline,
Thread_queue_Context queue_context 
)

Releases a job of a thread with respect to the scheduler.

Parameters
the_threadThe thread.
priority_nodeThe priority node of the job.
deadlineThe deadline in watchdog ticks since boot.
queue_contextThe thread queue context to provide the set of threads for _Thread_Priority_update().

◆ _Scheduler_Schedule()

RTEMS_INLINE_ROUTINE void _Scheduler_Schedule ( Thread_Control the_thread)

General scheduling decision.

The preferred method to add a new scheduler is to define the jump table entries and add a case to the _Scheduler_Initialize routine.

Generic scheduling implementations that rely on the ready queue only can be found in the _Scheduler_queue_XXX functions.This kernel routine implements the scheduling decision logic for the scheduler. It does NOT dispatch.

Parameters
the_threadThe thread which state changed previously.

◆ _Scheduler_Set()

RTEMS_INLINE_ROUTINE Status_Control _Scheduler_Set ( const Scheduler_Control new_scheduler,
Thread_Control the_thread,
Priority_Control  priority 
)

Sets a new scheduler.

Parameters
new_schedulerThe new scheduler to set.
[in,out]the_threadThe thread for the operations.
priorityThe initial priority for the thread with the new scheduler.
Return values
STATUS_SUCCESSFULThe operation succeeded.
STATUS_RESOURCE_IN_USEThe thread's wait queue is not empty.
STATUS_UNSATISFIEDThe new scheduler has no processors.

◆ _Scheduler_Set_affinity()

bool _Scheduler_Set_affinity ( Thread_Control the_thread,
size_t  cpusetsize,
const cpu_set_t *  cpuset 
)

Sets the thread's scheduler's affinity.

Parameters
[in,out]the_threadThe thread to set the affinity of.
cpusetsizeThe size of cpuset.
cpusetThe cpuset to set the affinity.
Return values
trueThe operation succeeded.
falseThe operation did not succeed.

◆ _Scheduler_Start_idle()

RTEMS_INLINE_ROUTINE void _Scheduler_Start_idle ( const Scheduler_Control scheduler,
Thread_Control the_thread,
Per_CPU_Control cpu 
)

Starts the idle thread for a particular processor.

Parameters
schedulerThe scheduler instance.
[in,out]the_threadThe idle thread for the processor.
[in,out]cpuThe processor for the idle thread.
See also
_Thread_Create_idle().

◆ _Scheduler_Tick()

RTEMS_INLINE_ROUTINE void _Scheduler_Tick ( const Per_CPU_Control cpu)

Scheduler method invoked at each clock tick.

This method is invoked at each clock tick to allow the scheduler implementation to perform any activities required. For the scheduler which support standard RTEMS features, this includes time-slicing management.

Parameters
cpuThe cpu control for the operation.

◆ _Scheduler_Unblock()

RTEMS_INLINE_ROUTINE void _Scheduler_Unblock ( Thread_Control the_thread)

Unblocks a thread with respect to the scheduler.

This operation must fetch the latest thread priority value for this scheduler instance and update its internal state if necessary.

Parameters
the_threadThe thread.
See also
_Scheduler_Node_get_priority().

◆ _Scheduler_Unmap_priority()

RTEMS_INLINE_ROUTINE Priority_Control _Scheduler_Unmap_priority ( const Scheduler_Control scheduler,
Priority_Control  priority 
)

Unmaps a thread priority from the scheduler domain to the user domain.

Parameters
schedulerThe scheduler instance.
priorityThe scheduler domain thread priority.
Returns
The corresponding thread priority of the user domain is returned.

◆ _Scheduler_Update_heir()

RTEMS_INLINE_ROUTINE void _Scheduler_Update_heir ( Thread_Control new_heir,
bool  force_dispatch 
)

Updates the heir.

Parameters
[in,out]new_heirThe new heir.
force_dispatchIndicates whether the dispatch happens also if the currently running thread is set as not preemptible.

◆ _Scheduler_Update_priority()

RTEMS_INLINE_ROUTINE void _Scheduler_Update_priority ( Thread_Control the_thread)

Propagates a priority change of a thread to the scheduler.

On uni-processor configurations, this operation must evaluate the thread state. In case the thread is not ready, then the priority update should be deferred to the next scheduler unblock operation.

The operation must update the heir and thread dispatch necessary variables in case the set of scheduled threads changes.

Parameters
the_threadThe thread changing its priority.
See also
_Scheduler_Node_get_priority().

◆ _Scheduler_Yield()

RTEMS_INLINE_ROUTINE void _Scheduler_Yield ( Thread_Control the_thread)

Scheduler yield with a particular thread.

This routine is invoked when a thread wishes to voluntarily transfer control of the processor to another thread.

Parameters
the_threadThe yielding thread.

Variable Documentation

◆ _Scheduler_Table

const Scheduler_Control _Scheduler_Table[]

Registered schedulers.

Application provided via <rtems/confdefs.h>.

See also
_Scheduler_Count.