RTEMS 5.2
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
schedulerpriorityimpl.h
Go to the documentation of this file.
1
13/*
14 * Copyright (C) 2010 Gedare Bloom.
15 * Copyright (C) 2011 On-Line Applications Research Corporation (OAR).
16 *
17 * The license and distribution terms for this file may be
18 * found in the file LICENSE in this distribution or at
19 * http://www.rtems.org/license/LICENSE.
20 */
21
22#ifndef _RTEMS_SCORE_SCHEDULERPRIORITYIMPL_H
23#define _RTEMS_SCORE_SCHEDULERPRIORITYIMPL_H
24
29#include <rtems/score/thread.h>
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
50{
52}
53
62 Thread_Control *the_thread
63)
64{
66}
67
76 Scheduler_Node *node
77)
78{
79 return (Scheduler_priority_Node *) node;
80}
81
91 Chain_Control *ready_queues,
92 Priority_Control maximum_priority
93)
94{
95 size_t index;
96
97 for ( index = 0 ; index <= (size_t) maximum_priority ; ++index ) {
98 _Chain_Initialize_empty( &ready_queues[ index ] );
99 }
100}
101
112 Chain_Node *node,
115)
116{
117 Chain_Control *ready_chain = ready_queue->ready_chain;
118
119 _Chain_Append_unprotected( ready_chain, node );
120 _Priority_bit_map_Add( bit_map, &ready_queue->Priority_map );
121}
122
133 Chain_Node *node,
136)
137{
138 Chain_Control *ready_chain = ready_queue->ready_chain;
139
140 _Chain_Prepend_unprotected( ready_chain, node );
141 _Priority_bit_map_Add( bit_map, &ready_queue->Priority_map );
142}
143
152 Chain_Node *node,
155)
156{
157 Chain_Control *ready_chain = ready_queue->ready_chain;
158
159 if ( _Chain_Has_only_one_node( ready_chain ) ) {
160 _Chain_Initialize_empty( ready_chain );
162 _Priority_bit_map_Remove( bit_map, &ready_queue->Priority_map );
163 } else {
165 }
166}
167
176 const Scheduler_Control *scheduler,
177 Thread_Control *the_thread,
178 Scheduler_Node *node
179)
180{
182 Scheduler_priority_Node *the_node;
183
185 the_node = _Scheduler_priority_Node_downcast( node );
186
188 &the_thread->Object.Node,
189 &the_node->Ready_queue,
190 &context->Bit_map
191 );
192}
193
206 Chain_Control *ready_queues
207)
208{
210 Chain_Node *first = _Chain_First( &ready_queues[ index ] );
211
212 _Assert( first != _Chain_Tail( &ready_queues[ index ] ) );
213
214 return first;
215}
216
229 const Scheduler_Control *scheduler,
230 Thread_Control *the_thread,
231 bool force_dispatch
232)
233{
238 &context->Bit_map,
239 &context->Ready[ 0 ]
240 );
241
242 ( void ) the_thread;
243
244 _Scheduler_Update_heir( heir, force_dispatch );
245}
246
258 unsigned int new_priority,
260 Chain_Control *ready_queues
261)
262{
263 ready_queue->current_priority = new_priority;
264 ready_queue->ready_chain = &ready_queues[ new_priority ];
265
267 bit_map,
268 &ready_queue->Priority_map,
269 new_priority
270 );
271}
272
275#ifdef __cplusplus
276}
277#endif
278
279#endif
280/* end of include file */
Chain Handler API.
#define _Assert(_e)
Assertion similar to assert() controlled via RTEMS_DEBUG instead of NDEBUG.
Definition: assert.h:100
#define RTEMS_INLINE_ROUTINE
Definition: basedefs.h:66
RTEMS_INLINE_ROUTINE bool _Chain_Has_only_one_node(const Chain_Control *the_chain)
Checks if this chain has only one node.
Definition: chainimpl.h:450
RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty(Chain_Control *the_chain)
Initializes this chain as empty.
Definition: chainimpl.h:505
RTEMS_INLINE_ROUTINE void _Chain_Extract_unprotected(Chain_Node *the_node)
Extracts this node (unprotected).
Definition: chainimpl.h:558
RTEMS_INLINE_ROUTINE Chain_Node * _Chain_Tail(Chain_Control *the_chain)
Returns pointer to chain tail.
Definition: chainimpl.h:227
RTEMS_INLINE_ROUTINE void _Chain_Prepend_unprotected(Chain_Control *the_chain, Chain_Node *the_node)
Prepends a node (unprotected).
Definition: chainimpl.h:732
RTEMS_INLINE_ROUTINE void _Chain_Append_unprotected(Chain_Control *the_chain, Chain_Node *the_node)
Appends a node (unprotected).
Definition: chainimpl.h:680
RTEMS_INLINE_ROUTINE void _Chain_Initialize_node(Chain_Node *the_node)
Initializes a chain node.
Definition: chainimpl.h:122
RTEMS_INLINE_ROUTINE Chain_Node * _Chain_First(const Chain_Control *the_chain)
Returns pointer to chain's first node.
Definition: chainimpl.h:260
RTEMS_INLINE_ROUTINE unsigned int _Priority_bit_map_Get_highest(const Priority_bit_map_Control *bit_map)
Gets highest portion of Priority queue bit map.
Definition: prioritybitmapimpl.h:196
uint64_t Priority_Control
The thread priority control.
Definition: priority.h:70
RTEMS_INLINE_ROUTINE void _Priority_bit_map_Add(Priority_bit_map_Control *bit_map, Priority_bit_map_Information *bit_map_info)
Adds Priority queue bit map information.
Definition: prioritybitmapimpl.h:162
RTEMS_INLINE_ROUTINE void _Priority_bit_map_Initialize_information(Priority_bit_map_Control *bit_map, Priority_bit_map_Information *bit_map_info, unsigned int new_priority)
Initializes the bit map information.
Definition: prioritybitmapimpl.h:234
RTEMS_INLINE_ROUTINE void _Priority_bit_map_Remove(Priority_bit_map_Control *bit_map, Priority_bit_map_Information *bit_map_info)
Removes Priority queue bit map information.
Definition: prioritybitmapimpl.h:179
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_enqueue_first(Chain_Node *node, Scheduler_priority_Ready_queue *ready_queue, Priority_bit_map_Control *bit_map)
Enqueues a node on the specified ready queue as first.
Definition: schedulerpriorityimpl.h:132
RTEMS_INLINE_ROUTINE Scheduler_priority_Node * _Scheduler_priority_Thread_get_node(Thread_Control *the_thread)
Gets the scheduler node of the thread.
Definition: schedulerpriorityimpl.h:61
RTEMS_INLINE_ROUTINE Scheduler_priority_Node * _Scheduler_priority_Node_downcast(Scheduler_Node *node)
Gets the priority node of the scheduler node.
Definition: schedulerpriorityimpl.h:75
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_extract(Chain_Node *node, Scheduler_priority_Ready_queue *ready_queue, Priority_bit_map_Control *bit_map)
Extracts a node from the specified ready queue.
Definition: schedulerpriorityimpl.h:151
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_update(Scheduler_priority_Ready_queue *ready_queue, unsigned int new_priority, Priority_bit_map_Control *bit_map, Chain_Control *ready_queues)
Updates the specified ready queue data according to the new priority value.
Definition: schedulerpriorityimpl.h:256
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_enqueue(Chain_Node *node, Scheduler_priority_Ready_queue *ready_queue, Priority_bit_map_Control *bit_map)
Enqueues a node on the specified ready queue.
Definition: schedulerpriorityimpl.h:111
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_initialize(Chain_Control *ready_queues, Priority_Control maximum_priority)
Ready queue initialization.
Definition: schedulerpriorityimpl.h:90
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Schedule_body(const Scheduler_Control *scheduler, Thread_Control *the_thread, bool force_dispatch)
Scheduling decision logic.
Definition: schedulerpriorityimpl.h:228
RTEMS_INLINE_ROUTINE Chain_Node * _Scheduler_priority_Ready_queue_first(Priority_bit_map_Control *bit_map, Chain_Control *ready_queues)
Returns a pointer to the first node.
Definition: schedulerpriorityimpl.h:204
RTEMS_INLINE_ROUTINE Scheduler_priority_Context * _Scheduler_priority_Get_context(const Scheduler_Control *scheduler)
Gets the context of the scheduler.
Definition: schedulerpriorityimpl.h:49
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Extract_body(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Extracts a node from the context of the scheduler.
Definition: schedulerpriorityimpl.h:175
RTEMS_INLINE_ROUTINE void _Scheduler_Update_heir(Thread_Control *new_heir, bool force_dispatch)
Updates the heir.
Definition: schedulerimpl.h:1184
RTEMS_INLINE_ROUTINE Scheduler_Context * _Scheduler_Get_context(const Scheduler_Control *scheduler)
Gets the context of the scheduler.
Definition: schedulerimpl.h:58
RTEMS_INLINE_ROUTINE Scheduler_Node * _Thread_Scheduler_get_home_node(const Thread_Control *the_thread)
Gets the scheduler's home node.
Definition: threadimpl.h:1412
Inlined Routines in the Priority Handler Bit Map Implementation.
Inlined Routines Associated with the Manipulation of the Scheduler.
Thread Manipulation with the Priority-Based Scheduler.
Constants and Structures Related with the Thread Control Block.
Definition: chain.h:68
Chain_Node Node
Definition: objectdata.h:41
Definition: prioritybitmap.h:42
Scheduler node for per-thread data.
Definition: schedulernode.h:79
Definition: schedulerpriority.h:65
Scheduler node specialization for Deterministic Priority schedulers.
Definition: schedulerpriority.h:101
Scheduler_priority_Ready_queue Ready_queue
The associated ready queue of this node.
Definition: schedulerpriority.h:110
Data for ready queue operations.
Definition: schedulerpriority.h:85
unsigned int current_priority
The thread priority currently used by the scheduler.
Definition: schedulerpriority.h:89
Chain_Control * ready_chain
Definition: schedulerpriority.h:92
Priority_bit_map_Information Priority_map
Definition: schedulerpriority.h:95
Scheduler control.
Definition: scheduler.h:269
Definition: thread.h:732
Objects_Control Object
Definition: thread.h:734
unsigned context
Definition: tlb.h:1
Definition: chain.h:86