RTEMS  5.1
threadq.h
Go to the documentation of this file.
1 
12 /*
13  * COPYRIGHT (c) 1989-2014.
14  * On-Line Applications Research Corporation (OAR).
15  *
16  * The license and distribution terms for this file may be
17  * found in the file LICENSE in this distribution or at
18  * http://www.rtems.org/license/LICENSE.
19  */
20 
21 #ifndef _RTEMS_SCORE_THREADQ_H
22 #define _RTEMS_SCORE_THREADQ_H
23 
24 #include <rtems/score/chain.h>
25 #include <rtems/score/isrlock.h>
26 #include <rtems/score/object.h>
27 #include <rtems/score/priority.h>
28 #include <rtems/score/rbtree.h>
29 #include <rtems/score/states.h>
31 
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35 
36 struct Per_CPU_Control;
37 
38 struct Scheduler_Node;
39 
54 typedef struct _Thread_Control Thread_Control;
55 
57 
59 
61 
72 typedef void ( *Thread_queue_Enqueue_callout )(
73  Thread_queue_Queue *queue,
74  Thread_Control *the_thread,
75  struct Per_CPU_Control *cpu_self,
76  Thread_queue_Context *queue_context
77 );
78 
87  Thread_Control *the_thread
88 );
89 
90 #if defined(RTEMS_MULTIPROCESSING)
91 
101 typedef void ( *Thread_queue_MP_callout )(
102  Thread_Control *the_proxy,
103  Objects_Id mp_id
104 );
105 #endif
106 
107 #if defined(RTEMS_SMP)
108 
118 typedef struct {
119  Chain_Node Node;
120 
121  Atomic_Uint go_ahead;
122 } Thread_queue_Gate;
123 #endif
124 
125 typedef struct {
131 
132 #if defined(RTEMS_SMP)
133 
136  struct {
142  Thread_queue_Gate Gate;
143 
147  Thread_queue_Queue *queue;
148  } Wait;
149 #endif
151 
152 #if defined(RTEMS_SMP)
153 
157 typedef struct {
162  RBTree_Node Registry_node;
163 
167  Thread_queue_Queue *source;
168 
173  Thread_queue_Queue *target;
174 
178  Chain_Node Path_node;
179 
183  Thread_Control *owner;
184 
189  Thread_queue_Lock_context Lock_context;
190 } Thread_queue_Link;
191 #endif
192 
204 
209 
222 
228  union {
233 
237  const void *arg;
238  } Timeout;
239 
240 #if defined(RTEMS_SMP)
241 
251  struct {
255  Chain_Control Links;
256 
260  Thread_queue_Link Start;
261 
266  Thread_queue_Link Deadlock;
267  } Path;
268 #endif
269 
274  struct {
279 
284  size_t update_count;
285 
294  } Priority;
295 
305 
306 #if defined(RTEMS_MULTIPROCESSING)
307 
317  Thread_queue_MP_callout mp_callout;
318 #endif
319 };
320 
324 typedef struct {
325 #if defined(RTEMS_SMP)
326 
332  Chain_Node Node;
333 #endif
334 
339 
346 
360 typedef struct _Thread_queue_Heads {
364  union {
373 
374 #if !defined(RTEMS_SMP)
375 
379 #endif
380  } Heads;
381 
387 
393 
394 #if defined(RTEMS_SMP)
395 
398  Thread_queue_Priority_queue Priority[ RTEMS_ZERO_LENGTH_ARRAY ];
399 #endif
401 
415 #if defined(RTEMS_SMP)
416  SMP_ticket_lock_Control Lock;
417 #endif
418 
427 
432 
436  const char *name;
437 };
438 
449  Thread_queue_Queue *queue,
450  Priority_Actions *priority_actions
451 );
452 
464  Thread_queue_Queue *queue,
465  Thread_Control *the_thread,
466  Thread_queue_Context *queue_context
467 );
468 
476  Thread_queue_Queue *queue,
477  Thread_Control *the_thread,
478  Thread_queue_Context *queue_context
479 );
480 
492 typedef Thread_Control *( *Thread_queue_Surrender_operation )(
493  Thread_queue_Queue *queue,
494  Thread_queue_Heads *heads,
495  Thread_Control *previous_owner,
496  Thread_queue_Context *queue_context
497 );
498 
508 typedef Thread_Control *( *Thread_queue_First_operation )(
509  Thread_queue_Heads *heads
510 );
511 
522 
529 
536 
541 
546 };
547 
552 typedef struct {
553 #if defined(RTEMS_SMP)
554 #if defined(RTEMS_DEBUG)
555 
566  uint32_t owner;
567 #endif
568 
569 #if defined(RTEMS_PROFILING)
570 
576  SMP_lock_Stats Lock_stats;
577 #endif
578 #endif
579 
585 
588 #ifdef __cplusplus
589 }
590 #endif
591 
592 #endif
593 /* end of include file */
Watchdog_Interval ticks
The timeout in ticks.
Definition: threadq.h:232
Thread_Control * owner
The thread queue owner.
Definition: threadq.h:431
The priority aggregation.
Definition: priority.h:133
Definition: chain.h:68
void(* Thread_queue_Deadlock_callout)(Thread_Control *the_thread)
Thread queue deadlock callout.
Definition: threadq.h:86
Thread_Control *(* Thread_queue_Surrender_operation)(Thread_queue_Queue *queue, Thread_queue_Heads *heads, Thread_Control *previous_owner, Thread_queue_Context *queue_context)
Thread queue surrender operation.
Definition: threadq.h:492
Definition: threadq.h:125
uint32_t Watchdog_Interval
Type is used to specify the length of intervals.
Definition: watchdogticks.h:38
union _Thread_queue_Heads::@3986 Heads
struct Thread_queue_Context::@3985 Priority
Block to manage thread priority changes due to a thread queue operation.
Thread queue context for the thread queue methods.
Definition: threadq.h:198
Priority_Actions Actions
A priority action list.
Definition: threadq.h:278
Thread_Control * update[2]
Threads to update the priority via _Thread_Priority_update().
Definition: threadq.h:293
Thread_queue_Enqueue_callout enqueue_callout
The enqueue callout for _Thread_queue_Enqueue().
Definition: threadq.h:221
Thread priority queue.
Definition: threadq.h:324
Constants and Structures Associated with the Object Handler.
Thread_queue_Deadlock_callout deadlock_callout
Invoked in case of a detected deadlock.
Definition: threadq.h:304
void(* Thread_queue_Enqueue_operation)(Thread_queue_Queue *queue, Thread_Control *the_thread, Thread_queue_Context *queue_context)
Thread queue enqueue operation.
Definition: threadq.h:463
A list of priority actions.
Definition: priority.h:193
Definition: chain.h:86
Thread Execution State Information.
union Thread_queue_Context::@3984 Timeout
Interval to wait.
Definition: threadq.h:552
Thread_queue_First_operation first
Thread queue first operation.
Definition: threadq.h:545
Red-black tree node.
Definition: rbtree.h:55
Thread_queue_Priority_queue Priority
This is the set of threads for priority discipline waiting.
Definition: threadq.h:378
Definition: threadq.h:402
uint32_t States_Control
Definition: states.h:46
Thread queue operations.
Definition: threadq.h:517
size_t update_count
Count of threads to update the priority via _Thread_Priority_update().
Definition: threadq.h:284
Thread_queue_Queue Queue
The actual thread queue.
Definition: threadq.h:583
Thread_queue_Heads * heads
Lock to protect this thread queue.
Definition: threadq.h:426
Thread queue heads.
Definition: threadq.h:360
Chain_Control Free_chain
A chain with free thread queue heads providing the spare thread queue heads for a thread once it is d...
Definition: threadq.h:386
Priority_Aggregation Queue
The actual thread priority queue.
Definition: threadq.h:338
void(* Thread_queue_Extract_operation)(Thread_queue_Queue *queue, Thread_Control *the_thread, Thread_queue_Context *queue_context)
Thread queue extract operation.
Definition: threadq.h:475
Thread_queue_Surrender_operation surrender
Thread queue surrender operation.
Definition: threadq.h:540
Definition: thread.h:732
Per CPU Core Structure.
Definition: percpu.h:347
Thread_Control *(* Thread_queue_First_operation)(Thread_queue_Heads *heads)
Thread queue first operation.
Definition: threadq.h:508
const char * name
The thread queue name.
Definition: threadq.h:436
void(* Thread_queue_Enqueue_callout)(Thread_queue_Queue *queue, Thread_Control *the_thread, struct Per_CPU_Control *cpu_self, Thread_queue_Context *queue_context)
Thread queue enqueue callout.
Definition: threadq.h:72
Thread_queue_Lock_context Lock_context
The lock context for the thread queue acquire and release operations.
Definition: threadq.h:203
Thread_queue_Priority_actions_operation priority_actions
Thread queue priority actions operation.
Definition: threadq.h:521
Thread_queue_Extract_operation extract
Thread queue extract operation.
Definition: threadq.h:535
Constants and Structures Associated with the Red-Black Tree Handler.
Priority Handler API.
struct _Thread_queue_Heads Thread_queue_Heads
Thread queue heads.
States_Control thread_state
The thread state for _Thread_queue_Enqueue().
Definition: threadq.h:208
Constants for the watchdog ticks.
Chain_Node Free_node
A chain node to add these thread queue heads to the free chain of the thread queue heads dedicated to...
Definition: threadq.h:392
Thread_queue_Enqueue_operation enqueue
Thread queue enqueue operation.
Definition: threadq.h:528
Chain Handler API.
Scheduler node for per-thread data.
Definition: schedulernode.h:79
uint32_t Objects_Id
Definition: object.h:80
struct Scheduler_Node * scheduler_node
This priority queue is added to a scheduler node of the owner in case of priority inheritance.
Definition: threadq.h:344
void(* Thread_queue_Priority_actions_operation)(Thread_queue_Queue *queue, Priority_Actions *priority_actions)
Thread queue action operation.
Definition: threadq.h:448
const void * arg
The timeout argument, e.g. pointer to struct timespec.
Definition: threadq.h:237
Local ISR lock context for acquire and release pairs.
Definition: isrlock.h:65
ISR_lock_Context Lock_context
The lock context for the thread queue acquire and release operations.
Definition: threadq.h:130
Chain_Control Fifo
This is the FIFO discipline list.
Definition: threadq.h:372
ISR Locks.