source: rtems/cpukit/score/src/scheduleredfreleasejob.c @ 99fc1d1d

5
Last change on this file since 99fc1d1d was 99fc1d1d, checked in by Sebastian Huber <sebastian.huber@…>, on Jun 9, 2016 at 7:30:40 PM

score: Rework EDF scheduler

Use inline red-black tree insert. Do not use shifting priorities since
this is not supported by the thread queues. Due to the 32-bit
Priority_Control this currently limits the uptime to 49days with a 1ms
clock tick.

Update #2173.

  • Property mode set to 100644
File size: 1.4 KB
Line 
1/**
2 * @file
3 *
4 * @brief Scheduler EDF Release Job
5 * @ingroup ScoreScheduler
6 */
7
8/*
9 *  Copyright (C) 2011 Petr Benes.
10 *  Copyright (C) 2011 On-Line Applications Research Corporation (OAR).
11 *
12 *  The license and distribution terms for this file may be
13 *  found in the file LICENSE in this distribution or at
14 *  http://www.rtems.org/license/LICENSE.
15 */
16
17#if HAVE_CONFIG_H
18#include "config.h"
19#endif
20
21#include <rtems/score/scheduleredfimpl.h>
22
23static bool _Scheduler_EDF_Priority_filter(
24  Thread_Control   *the_thread,
25  Priority_Control *new_priority_p,
26  void             *arg
27)
28{
29  Scheduler_EDF_Node *node;
30  Priority_Control    current_priority;
31  Priority_Control    new_priority;
32
33  node = _Scheduler_EDF_Thread_get_node( the_thread );
34
35  current_priority = the_thread->current_priority;
36  new_priority = *new_priority_p;
37
38  if ( new_priority == 0 ) {
39    new_priority = node->background_priority;
40  }
41
42  node->current_priority = new_priority;
43  the_thread->real_priority = new_priority;
44
45  return _Thread_Priority_less_than( current_priority, new_priority )
46    || !_Thread_Owns_resources( the_thread );
47}
48
49void _Scheduler_EDF_Release_job(
50  const Scheduler_Control *scheduler,
51  Thread_Control          *the_thread,
52  uint64_t                 deadline
53)
54{
55  _Thread_Change_priority(
56    the_thread,
57    (Priority_Control) deadline,
58    NULL,
59    _Scheduler_EDF_Priority_filter,
60    true
61  );
62}
Note: See TracBrowser for help on using the repository browser.