source: rtems/cpukit/score/include/rtems/score/scheduleredfimpl.h @ 0f41cc3

4.115
Last change on this file since 0f41cc3 was beab7329, checked in by Sebastian Huber <sebastian.huber@…>, on 05/13/14 at 14:03:05

score: Introduce scheduler nodes

Rename scheduler per-thread information into scheduler nodes using
Scheduler_Node as the base type. Use inheritance for specialized
schedulers.

Move the scheduler specific states from the thread control block into
the scheduler node structure.

Validate the SMP scheduler node state transitions in case RTEMS_DEBUG is
defined.

  • Property mode set to 100644
File size: 1.5 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup ScoreSchedulerEDF
5 *
6 * @brief EDF Scheduler Implementation
7 */
8
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
21#include <rtems/score/scheduleredf.h>
22#include <rtems/score/schedulerimpl.h>
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
28/**
29 * @addtogroup ScoreSchedulerEDF EDF
30 *
31 * @{
32 */
33
34RTEMS_INLINE_ROUTINE Scheduler_EDF_Context *
35  _Scheduler_EDF_Get_context( const Scheduler_Control *scheduler )
36{
37  return (Scheduler_EDF_Context *) scheduler->context;
38}
39
40RTEMS_INLINE_ROUTINE Scheduler_EDF_Node *_Scheduler_EDF_Node_get(
41  Thread_Control *the_thread
42)
43{
44  return (Scheduler_EDF_Node *) _Scheduler_Node_get( the_thread );
45}
46
47RTEMS_INLINE_ROUTINE void _Scheduler_EDF_Schedule_body(
48  const Scheduler_Control *scheduler,
49  Thread_Control          *the_thread,
50  bool                     force_dispatch
51)
52{
53  Scheduler_EDF_Context *context =
54    _Scheduler_EDF_Get_context( scheduler );
55  RBTree_Node *first = _RBTree_First( &context->Ready, RBT_LEFT );
56  Scheduler_EDF_Node *node =
57    _RBTree_Container_of(first, Scheduler_EDF_Node, Node);
58  Thread_Control *heir = node->thread;
59
60  ( void ) the_thread;
61
62  _Scheduler_Update_heir( heir, force_dispatch );
63}
64
65/**@}*/
66
67#ifdef __cplusplus
68}
69#endif
70
71#endif
72/* end of include file */
Note: See TracBrowser for help on using the repository browser.