RTEMS CPU Kit with SuperCore  4.11.2
scheduleredfimpl.h
Go to the documentation of this file.
1 
9 /*
10  * Copryight (c) 2011 Petr Benes.
11  * Copyright (C) 2011 On-Line Applications Research Corporation (OAR).
12  *
13  * The license and distribution terms for this file may be
14  * found in the file LICENSE in this distribution or at
15  * http://www.rtems.org/license/LICENSE.
16  */
17 
18 #ifndef _RTEMS_SCORE_SCHEDULEREDFIMPL_H
19 #define _RTEMS_SCORE_SCHEDULEREDFIMPL_H
20 
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
35  _Scheduler_EDF_Get_context( const Scheduler_Control *scheduler )
36 {
37  return (Scheduler_EDF_Context *) _Scheduler_Get_context( scheduler );
38 }
39 
40 RTEMS_INLINE_ROUTINE Scheduler_EDF_Node *_Scheduler_EDF_Thread_get_node(
41  Thread_Control *the_thread
42 )
43 {
44  return (Scheduler_EDF_Node *) _Scheduler_Thread_get_node( the_thread );
45 }
46 
47 RBTree_Compare_result _Scheduler_EDF_Compare(
48  const RBTree_Node* n1,
49  const RBTree_Node* n2
50 );
51 
52 RTEMS_INLINE_ROUTINE void _Scheduler_EDF_Enqueue(
53  const Scheduler_Control *scheduler,
54  Thread_Control *the_thread
55 )
56 {
57  Scheduler_EDF_Context *context =
58  _Scheduler_EDF_Get_context( scheduler );
59  Scheduler_EDF_Node *node = _Scheduler_EDF_Thread_get_node( the_thread );
60 
62  &context->Ready,
63  &node->Node,
64  _Scheduler_EDF_Compare,
65  false
66  );
67  node->queue_state = SCHEDULER_EDF_QUEUE_STATE_YES;
68 }
69 
70 RTEMS_INLINE_ROUTINE void _Scheduler_EDF_Extract(
71  const Scheduler_Control *scheduler,
72  Thread_Control *the_thread
73 )
74 {
75  Scheduler_EDF_Context *context =
76  _Scheduler_EDF_Get_context( scheduler );
77  Scheduler_EDF_Node *node = _Scheduler_EDF_Thread_get_node( the_thread );
78 
79  _RBTree_Extract( &context->Ready, &node->Node );
80 }
81 
82 RTEMS_INLINE_ROUTINE void _Scheduler_EDF_Schedule_body(
83  const Scheduler_Control *scheduler,
84  Thread_Control *the_thread,
85  bool force_dispatch
86 )
87 {
88  Scheduler_EDF_Context *context =
89  _Scheduler_EDF_Get_context( scheduler );
90  RBTree_Node *first = _RBTree_First( &context->Ready, RBT_LEFT );
91  Scheduler_EDF_Node *node =
92  RTEMS_CONTAINER_OF( first, Scheduler_EDF_Node, Node );
93  Thread_Control *heir = node->thread;
94 
95  ( void ) the_thread;
96 
97  _Scheduler_Update_heir( heir, force_dispatch );
98 }
99 
102 #ifdef __cplusplus
103 }
104 #endif
105 
106 #endif
107 /* end of include file */
Scheduler control.
Definition: scheduler.h:192
Scheduler node specialization for EDF schedulers.
Definition: scheduleredf.h:96
#define RTEMS_INLINE_ROUTINE
The following (in conjunction with compiler arguments) are used to choose between the use of static i...
Definition: basedefs.h:135
Inlined Routines Associated with the Manipulation of the Scheduler.
RTEMS_INLINE_ROUTINE RBTree_Node * _RBTree_First(const RBTree_Control *the_rbtree, RBTree_Direction dir)
Return pointer to RBTree's first node.
Definition: rbtree.h:327
Data Related to the Manipulation of Threads for the EDF Scheduler.
Thread_Control * thread
Pointer to corresponding Thread Control Block.
Definition: scheduleredf.h:105
long RBTree_Compare_result
Integer type for compare results.
Definition: rbtree.h:99
This structure defines the Thread Control Block (TCB).
Definition: thread.h:671
RBTree_Node * _RBTree_Insert(RBTree_Control *the_rbtree, RBTree_Node *the_node, RBTree_Compare compare, bool is_unique)
Inserts the node into the red-black tree.
Definition: rbtreeinsert.c:88
RBTree_Node Node
Rbtree node related to this thread.
Definition: scheduleredf.h:109
Definition: scheduleredf.h:69
RBTree_Control Ready
Top of the ready queue.
Definition: scheduleredf.h:78
void _RBTree_Extract(RBTree_Control *the_rbtree, RBTree_Node *the_node)
Extracts (removes) the node from the red-black tree.
Definition: rbtreeextract.c:95
Scheduler_EDF_Queue_state queue_state
State of the thread with respect to ready queue.
Definition: scheduleredf.h:113
#define RTEMS_CONTAINER_OF(_m, _type, _member_name)
Returns a pointer to the container of a specified member pointer.
Definition: basedefs.h:237
This is used to manage each element (node) which is placed on a RBT.
Definition: rbtree.h:75