19 #ifndef _RTEMS_SCORE_SCHEDULER_H 20 #define _RTEMS_SCORE_SCHEDULER_H 24 #if defined(__RTEMS_HAVE_SYS_CPUSET_H__) && defined(RTEMS_SMP) 25 #include <sys/cpuset.h> 48 #if defined(RTEMS_SMP) 51 #define SCHEDULER_RETURN_VOID_OR_NULL return NULL 53 typedef void Scheduler_Void_or_thread;
55 #define SCHEDULER_RETURN_VOID_OR_NULL return 69 Scheduler_Void_or_thread ( *yield )(
81 Scheduler_Void_or_thread ( *unblock )(
87 Scheduler_Void_or_thread ( *change_priority )(
94 #if defined(RTEMS_SMP) 112 Thread_Control *( *ask_for_help )(
114 Thread_Control *offers_help,
115 Thread_Control *needs_help
126 void ( *update_priority )(
133 int ( *priority_compare )(
139 void ( *release_job ) (
149 void ( *start_idle )(
155 #if defined(__RTEMS_HAVE_SYS_CPUSET_H__) && defined(RTEMS_SMP) 157 bool ( *get_affinity )(
165 bool ( *set_affinity )(
181 #if defined(RTEMS_SMP) 185 uint32_t processor_count;
209 #if defined(RTEMS_SMP) 236 SCHEDULER_HELP_YOURSELF,
253 SCHEDULER_HELP_ACTIVE_OWNER,
264 SCHEDULER_HELP_ACTIVE_RIVAL,
274 SCHEDULER_HELP_PASSIVE
275 } Scheduler_Help_state;
282 #if defined(RTEMS_SMP) 303 Scheduler_Help_state help_state;
349 #if defined(RTEMS_SMP) 352 #define _Scheduler_Count ( (size_t) 1 ) 355 #if defined(RTEMS_SMP) 359 #define SCHEDULER_ASSIGN_DEFAULT UINT32_C(0x0) 364 #define SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL SCHEDULER_ASSIGN_DEFAULT 369 #define SCHEDULER_ASSIGN_PROCESSOR_MANDATORY UINT32_C(0x1) 390 } Scheduler_Assignment;
401 extern const Scheduler_Assignment _Scheduler_Assignments[];
404 #if defined(RTEMS_SMP) 420 #define SCHEDULER_OPERATION_DEFAULT_ASK_FOR_HELP \ 421 _Scheduler_default_Ask_for_help, 423 #define SCHEDULER_OPERATION_DEFAULT_ASK_FOR_HELP 512 #if defined(__RTEMS_HAVE_SYS_CPUSET_H__) && defined(RTEMS_SMP) 524 bool _Scheduler_default_Get_affinity(
544 bool _Scheduler_default_Set_affinity(
548 const cpu_set_t *cpuset
551 #define SCHEDULER_OPERATION_DEFAULT_GET_SET_AFFINITY \ 552 , _Scheduler_default_Get_affinity \ 553 , _Scheduler_default_Set_affinity 555 #define SCHEDULER_OPERATION_DEFAULT_GET_SET_AFFINITY Thread Priority Manipulation Routines.
This is used to manage each element (node) which is placed on a chain.
Definition: chain.h:65
Scheduler control.
Definition: scheduler.h:192
Scheduler_Operations Operations
The scheduler operations.
Definition: scheduler.h:201
Scheduler context.
Definition: scheduler.h:180
The scheduler operations.
Definition: scheduler.h:61
struct Scheduler_Context Scheduler_Context
Scheduler context.
Scheduler_Context * context
Reference to a statically allocated scheduler context.
Definition: scheduler.h:196
void _Scheduler_default_Release_job(const Scheduler_Control *scheduler, Thread_Control *the_thread, uint32_t deadline)
Does nothing.
Definition: schedulerdefaultreleasejob.c:24
Constants and Structures Related with the Thread Control Block.
uint32_t Priority_Control
The following type defines the control block used to manage thread priorities.
Definition: priority.h:56
void _Scheduler_default_Tick(const Scheduler_Control *scheduler, Thread_Control *executing)
Performs tick operations depending on the CPU budget algorithm for each executing thread...
Definition: schedulerdefaulttick.c:27
uint32_t name
The scheduler name.
Definition: scheduler.h:206
This structure defines the Thread Control Block (TCB).
Definition: thread.h:671
Per CPU Core Structure.
Definition: percpu.h:233
void _Scheduler_default_Start_idle(const Scheduler_Control *scheduler, Thread_Control *the_thread, struct Per_CPU_Control *cpu)
Starts an idle thread.
Definition: schedulerdefaultstartidle.c:16
void _Scheduler_default_Node_destroy(const Scheduler_Control *scheduler, Thread_Control *the_thread)
Does nothing.
Definition: schedulerdefaultnodedestroy.c:24
void _Scheduler_default_Node_initialize(const Scheduler_Control *scheduler, Thread_Control *the_thread)
Does nothing.
Definition: schedulerdefaultnodeinit.c:24
void _Scheduler_default_Schedule(const Scheduler_Control *scheduler, Thread_Control *the_thread)
Does nothing.
Definition: schedulerdefaultschedule.c:16
Scheduler node for per-thread data.
Definition: scheduler.h:281
const Scheduler_Control _Scheduler_Table[]
Registered schedulers.
void _Scheduler_default_Update_priority(const Scheduler_Control *scheduler, Thread_Control *the_thread, Priority_Control new_priority)
Does nothing.
Definition: schedulerdefaultupdate.c:24
#define _Scheduler_Count
Count of registered schedulers.
Definition: scheduler.h:352