source: rtems/cpukit/score/src/schedulercbs.c @ 1072d53d

4.115
Last change on this file since 1072d53d was 1072d53d, checked in by Jennifer Averett <Jennifer.Averett@…>, on 10/04/11 at 15:18:59

2011-10-04 Sebastian Huber <sebastian.huber@…>

PR 1922

  • score/include/rtems/score/schedulercbs.h, score/src/schedulercbs.c: EDF and CBS scheduler: extern declarations fix.
  • Property mode set to 100644
File size: 1.8 KB
Line 
1/*
2 *  Copyright (C) 2011 Petr Benes.
3 *  Copyright (C) 2011 On-Line Applications Research Corporation (OAR).
4 *
5 *  The license and distribution terms for this file may be
6 *  found in the file LICENSE in this distribution or at
7 *  http://www.rtems.com/license/LICENSE.
8 *
9 *  $Id$
10 */
11
12#if HAVE_CONFIG_H
13#include "config.h"
14#endif
15
16#include <rtems/system.h>
17#include <rtems/config.h>
18#include <rtems/score/scheduler.h>
19#include <rtems/score/schedulercbs.h>
20#include <rtems/rtems/signal.h>
21
22Scheduler_CBS_Server **_Scheduler_CBS_Server_list;
23
24void _Scheduler_CBS_Budget_callout(
25  Thread_Control *the_thread
26)
27{
28  Priority_Control          new_priority;
29  Scheduler_CBS_Per_thread *sched_info;
30  Scheduler_CBS_Server_id   server_id;
31
32  /* Put violating task to background until the end of period. */
33  new_priority = the_thread->Start.initial_priority;
34  if ( the_thread->real_priority != new_priority )
35    the_thread->real_priority = new_priority;
36  if ( the_thread->current_priority != new_priority )
37    _Thread_Change_priority(the_thread, new_priority, true);
38
39  /* Invoke callback function if any. */
40  sched_info = (Scheduler_CBS_Per_thread *) the_thread->scheduler_info;
41  if ( sched_info->cbs_server->cbs_budget_overrun ) {
42    _Scheduler_CBS_Get_server_id(
43        sched_info->cbs_server->task_id,
44        &server_id
45    );
46    sched_info->cbs_server->cbs_budget_overrun( server_id );
47  }
48}
49
50int _Scheduler_CBS_Initialize(void)
51{
52  unsigned int i;
53  _Scheduler_CBS_Server_list = (Scheduler_CBS_Server **) _Workspace_Allocate(
54      _Scheduler_CBS_Maximum_servers * sizeof(Scheduler_CBS_Server*) );
55  if ( !_Scheduler_CBS_Server_list )
56    return SCHEDULER_CBS_ERROR_NO_MEMORY;
57  for (i = 0; i<_Scheduler_CBS_Maximum_servers; i++) {
58    _Scheduler_CBS_Server_list[i] = NULL;
59  }
60  return SCHEDULER_CBS_OK;
61}
Note: See TracBrowser for help on using the repository browser.