39#ifndef _RTEMS_SCORE_SCHEDULERUNIIMPL_H
40#define _RTEMS_SCORE_SCHEDULERUNIIMPL_H
60static inline void _Scheduler_uniprocessor_Update_heir(
62 Thread_Control *new_heir
73 heir->
Scheduler.state = THREAD_SCHEDULER_BLOCKED;
74 new_heir->
Scheduler.state = THREAD_SCHEDULER_SCHEDULED;
76 _Thread_Update_CPU_time_used( heir, _Thread_Get_CPU( heir ) );
77 _Thread_Heir = new_heir;
78 _Thread_Dispatch_necessary =
true;
89static inline void _Scheduler_uniprocessor_Update_heir_if_necessary(
90 Thread_Control *new_heir
93 Thread_Control *heir = _Thread_Heir;
95 if ( heir != new_heir ) {
96 _Scheduler_uniprocessor_Update_heir( heir, new_heir );
107static inline void _Scheduler_uniprocessor_Update_heir_if_preemptible(
108 Thread_Control *heir,
109 Thread_Control *new_heir
113 _Scheduler_uniprocessor_Update_heir( heir, new_heir );
126static inline void _Scheduler_uniprocessor_Block(
127 const Scheduler_Control *scheduler,
128 Thread_Control *the_thread,
131 const Scheduler_Control *,
135 Thread_Control *( *get_highest_ready )(
const Scheduler_Control * )
138 ( *extract )( scheduler, the_thread, node );
142 if ( _Thread_Is_heir( the_thread ) ) {
143 Thread_Control *highest_ready;
145 highest_ready = ( *get_highest_ready )( scheduler );
146 _Scheduler_uniprocessor_Update_heir( _Thread_Heir, highest_ready );
157static inline void _Scheduler_uniprocessor_Unblock(
158 const Scheduler_Control *scheduler,
159 Thread_Control *the_thread,
163 Thread_Control *heir;
172 if ( priority < _Thread_Get_priority( heir ) ) {
173 _Scheduler_uniprocessor_Update_heir_if_preemptible( heir, the_thread );
184static inline void _Scheduler_uniprocessor_Schedule(
185 const Scheduler_Control *scheduler,
186 Thread_Control *( *get_highest_ready )(
const Scheduler_Control * )
189 Thread_Control *highest_ready;
191 highest_ready = ( *get_highest_ready )( scheduler );
192 _Scheduler_uniprocessor_Update_heir_if_preemptible(
204static inline void _Scheduler_uniprocessor_Yield(
205 const Scheduler_Control *scheduler,
206 Thread_Control *( *get_highest_ready )(
const Scheduler_Control * )
209 Thread_Control *highest_ready;
211 highest_ready = ( *get_highest_ready )( scheduler );
212 _Scheduler_uniprocessor_Update_heir_if_necessary( highest_ready );
#define _Assert(_e)
Assertion similar to assert() controlled via RTEMS_DEBUG instead of NDEBUG and static analysis runs.
Definition assert.h:96
uint64_t Priority_Control
The thread priority control.
Definition priority.h:91
This header file provides interfaces of the Scheduler Handler which are only used by the implementati...
Scheduler node for per-thread data.
Definition schedulernode.h:94
Thread_Scheduler_control Scheduler
Scheduler related control.
Definition thread.h:874
bool is_preemptible
Definition thread.h:914