source: rtems/cpukit/score/src/schedulercbsattachthread.c @ e2bcb32

4.11
Last change on this file since e2bcb32 was 82db8e56, checked in by Joel Sherrill <joel.sherrill@…>, on Sep 15, 2011 at 3:49:32 PM

2011-09-15 Petr Benes <benesp16@…>

PR 1906/cpukit

  • sapi/Makefile.am, sapi/preinstall.am, sapi/include/confdefs.h, score/Makefile.am, score/preinstall.am: Add the CBS (Constant Bandwidth Server) scheduler. This is a complex scheduling policy built atop of the EDF scheduler. Unlike other schedulers, this one provides a user API and handles not only deadlines of tasks but also claimed budget per period. The main aim of the scheduler is isolation of tasks so that each task is guaranteed to meet all deadlines regardless of how other tasks behave.
  • sapi/include/rtems/cbs.h, sapi/inline/rtems/cbs.inl, score/include/rtems/score/schedulercbs.h, score/src/schedulercbs.c, score/src/schedulercbsattachthread.c, score/src/schedulercbscleanup.c, score/src/schedulercbscreateserver.c, score/src/schedulercbsdestroyserver.c, score/src/schedulercbsdetachthread.c, score/src/schedulercbsgetapprovedbudget.c, score/src/schedulercbsgetexecutiontime.c, score/src/schedulercbsgetparameters.c, score/src/schedulercbsgetremainingbudget.c, score/src/schedulercbsgetserverid.c, score/src/schedulercbsreleasejob.c, score/src/schedulercbssetparameters.c, score/src/schedulercbsunblock.c: New files.
  • 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/object.h>
21
22int _Scheduler_CBS_Attach_thread (
23  Scheduler_CBS_Server_id server_id,
24  rtems_id                task_id
25)
26{
27  Objects_Locations location;
28  Thread_Control *the_thread;
29  Scheduler_CBS_Per_thread *sched_info;
30
31  if ( server_id < 0 || server_id >= _Scheduler_CBS_Maximum_servers )
32    return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
33
34  the_thread = _Thread_Get(task_id, &location);
35  /* The routine _Thread_Get may disable dispatch and not enable again. */
36  if ( the_thread )
37    _Thread_Enable_dispatch();
38  if ( !the_thread )
39    return SCHEDULER_CBS_ERROR_INVALID_PARAMETER;
40
41  sched_info = (Scheduler_CBS_Per_thread *) the_thread->scheduler_info;
42
43  /* Thread is already attached to a server. */
44  if ( sched_info->cbs_server )
45    return SCHEDULER_CBS_ERROR_FULL;
46
47  /* Server is not valid. */
48  if ( !_Scheduler_CBS_Server_list[server_id] )
49    return SCHEDULER_CBS_ERROR_NOSERVER;
50
51  /* Server is already attached to a thread. */
52  if ( _Scheduler_CBS_Server_list[server_id]->task_id != -1 )
53    return SCHEDULER_CBS_ERROR_FULL;
54
55  _Scheduler_CBS_Server_list[server_id]->task_id = task_id;
56  sched_info->cbs_server = (void *) _Scheduler_CBS_Server_list[server_id];
57
58  the_thread->budget_callout   = _Scheduler_CBS_Budget_callout;
59  the_thread->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_CALLOUT;
60  the_thread->is_preemptible   = true;
61
62  return SCHEDULER_CBS_OK;
63}
Note: See TracBrowser for help on using the repository browser.