source: rtems/cpukit/score/src/schedulerpriorityaffinitysmp.c @ e1598a6

4.115
Last change on this file since e1598a6 was e1598a6, checked in by Sebastian Huber <sebastian.huber@…>, on 04/04/14 at 08:56:36

score: Static scheduler configuration

Do not allocate the scheduler control structures from the workspace.
This is a preparation step for configuration of clustered/partitioned
schedulers on SMP.

  • Property mode set to 100644
File size: 2.2 KB
Line 
1/**
2 * @file
3 *
4 * @brief Deterministic Priority Affinity SMP Scheduler Implementation
5 *
6 * @ingroup ScoreSchedulerPriorityAffinitySMP
7 */
8
9/*
10 *  COPYRIGHT (c) 2014.
11 *  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#if HAVE_CONFIG_H
19  #include "config.h"
20#endif
21
22#include <rtems/score/schedulerpriorityaffinitysmp.h>
23#include <rtems/score/schedulerpriorityimpl.h>
24#include <rtems/score/schedulersmpimpl.h>
25#include <rtems/score/wkspace.h>
26#include <rtems/score/cpusetimpl.h>
27
28RTEMS_INLINE_ROUTINE Scheduler_priority_affinity_SMP_Per_thread *
29_Scheduler_priority_affinity_Get_scheduler_info( Thread_Control *thread )
30{
31  return ( Scheduler_priority_affinity_SMP_Per_thread * ) thread->scheduler_info;
32}
33
34void * _Scheduler_priority_affinity_SMP_Allocate(
35  const Scheduler_Control *scheduler,
36  Thread_Control          *the_thread
37)
38{
39  Scheduler_priority_affinity_SMP_Per_thread *info =
40    _Workspace_Allocate( sizeof( *info ) );
41
42  info->Affinity = *_CPU_set_Default();
43  info->Affinity.set = &info->Affinity.preallocated;
44 
45  the_thread->scheduler_info = info;
46
47  return info;
48}
49
50bool _Scheduler_priority_affinity_SMP_Get_affinity(
51  const Scheduler_Control *scheduler,
52  Thread_Control          *thread,
53  size_t                   cpusetsize,
54  cpu_set_t               *cpuset
55)
56{
57  Scheduler_priority_affinity_SMP_Per_thread *info =
58    _Scheduler_priority_affinity_Get_scheduler_info(thread);
59
60  (void) scheduler;
61
62  if ( info->Affinity.setsize != cpusetsize ) {
63    return false;
64  }
65
66  CPU_COPY( cpuset, info->Affinity.set );
67  return true;
68}
69
70bool _Scheduler_priority_affinity_SMP_Set_affinity(
71  const Scheduler_Control *scheduler,
72  Thread_Control          *thread,
73  size_t                   cpusetsize,
74  cpu_set_t               *cpuset
75)
76{
77  Scheduler_priority_affinity_SMP_Per_thread *info =
78    _Scheduler_priority_affinity_Get_scheduler_info(thread);
79
80  (void) scheduler;
81 
82  if ( ! _CPU_set_Is_valid( cpuset, cpusetsize ) ) {
83    return false;
84  }
85
86  CPU_COPY( info->Affinity.set, cpuset );
87 
88  return true;
89}
Note: See TracBrowser for help on using the repository browser.