source: rtems/cpukit/score/src/cpuset.c @ 7a4b2645

5
Last change on this file since 7a4b2645 was 7a4b2645, checked in by Joel Sherrill <joel@…>, on 01/11/17 at 15:43:06

Remove obsolete RTEMS_HAVE_SYS_CPUSET_H

  • Property mode set to 100644
File size: 2.2 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup ScoreCpuset
5 *
6 * @brief Routines to Control a CPU Set.
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 <sys/cpuset.h>
23#include <rtems/sysinit.h>
24#include <rtems/score/cpusetimpl.h>
25#include <rtems/score/assert.h>
26#include <rtems/score/percpu.h>
27
28static CPU_set_Control cpuset_default;
29
30/*
31 * _CPU_set_Handler_initialization
32 */
33static void _CPU_set_Handler_initialization(void)
34{
35  uint32_t cpu_count;
36  uint32_t cpu_index;
37
38  /* We do not support a cpu count over CPU_SETSIZE  */
39  cpu_count = _SMP_Get_processor_count();
40
41  /* This should never happen */
42  _Assert( cpu_count <= CPU_SETSIZE );
43
44  /*  Initialize the affinity to be the set of all available CPU's   */
45  cpuset_default.set     = &cpuset_default.preallocated;
46  cpuset_default.setsize = sizeof( *cpuset_default.set );
47  CPU_ZERO_S( cpuset_default.setsize, &cpuset_default.preallocated );
48
49  for ( cpu_index=0; cpu_index<cpu_count; cpu_index++ )
50    CPU_SET_S( (int) cpu_index, cpuset_default.setsize, cpuset_default.set );
51}
52
53RTEMS_SYSINIT_ITEM(
54  _CPU_set_Handler_initialization,
55  RTEMS_SYSINIT_CPU_SET,
56  RTEMS_SYSINIT_ORDER_MIDDLE
57);
58
59/**
60 * _CPU_set_Is_valid
61 *
62 * This routine validates a cpuset size corresponds to
63 * the system correct size, that at least one
64 * valid cpu is set and that no invalid cpus are set.
65 */
66bool _CPU_set_Is_valid( const cpu_set_t *cpuset, size_t setsize )
67{
68  cpu_set_t             temp;
69
70  if ( !cpuset )
71    return false;
72
73  if ( setsize != cpuset_default.setsize )
74    return false;
75
76  /* Validate at least 1 valid cpu is set in cpuset */
77  CPU_AND_S( cpuset_default.setsize, &temp, cpuset, cpuset_default.set );
78
79  if ( CPU_COUNT_S( setsize, &temp ) == 0 )
80    return false;
81
82  /* Validate that no invalid cpu's are set in cpuset */
83  if ( !CPU_EQUAL_S( setsize, &temp, cpuset ) )
84    return false;
85
86  return true;
87}
88
89/**
90 * _CPU_set_Default
91 *
92 * This routine returns the default cpuset.
93 */
94const CPU_set_Control *_CPU_set_Default()
95{
96  return &cpuset_default;
97}
Note: See TracBrowser for help on using the repository browser.