source: rtems/cpukit/score/src/schedulerpriorityaffinitysmp.c @ 439c494

4.115
Last change on this file since 439c494 was 56c396b, checked in by Jennifer Averett <jennifer.averett@…>, on 03/19/14 at 20:20:01

score: Add priority affinity smp scheduler.

  • Property mode set to 100644
File size: 1.9 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( Thread_Control *the_thread )
35{
36  Scheduler_priority_affinity_SMP_Per_thread *info =
37    _Workspace_Allocate( sizeof( *info ) );
38
39  info->Affinity = *_CPU_set_Default();
40  info->Affinity.set = &info->Affinity.preallocated;
41 
42  the_thread->scheduler_info = info;
43
44  return info;
45}
46
47bool _Scheduler_priority_affinity_SMP_Get_affinity(
48  Thread_Control *thread,
49  size_t          cpusetsize,
50  cpu_set_t      *cpuset
51)
52{
53  Scheduler_priority_affinity_SMP_Per_thread *info =
54    _Scheduler_priority_affinity_Get_scheduler_info(thread);
55
56  if ( info->Affinity.setsize != cpusetsize ) {
57    return false;
58  }
59
60  CPU_COPY( cpuset, info->Affinity.set );
61  return true;
62}
63
64bool _Scheduler_priority_affinity_SMP_Set_affinity(
65  Thread_Control *thread,
66  size_t          cpusetsize,
67  cpu_set_t      *cpuset
68)
69{
70  Scheduler_priority_affinity_SMP_Per_thread *info =
71    _Scheduler_priority_affinity_Get_scheduler_info(thread);
72 
73  if ( ! _CPU_set_Is_valid( cpuset, cpusetsize ) ) {
74    return false;
75  }
76
77  CPU_COPY( info->Affinity.set, cpuset );
78 
79  return true;
80}
Note: See TracBrowser for help on using the repository browser.