1 #include <sched.h>
2 /*
3  * if we have an ancient sched.h we need to provide
4  * definitions for cpu_set_t and associated macros
5  */
6 #if !defined __cpu_set_t_defined
7 # define __cpu_set_t_defined
8 /* Size definition for CPU sets.  */
9 # define __CPU_SETSIZE	1024
10 # define __NCPUBITS	(8 * sizeof (__cpu_mask))
11 
12 /* Type for array elements in 'cpu_set'.  */
13 typedef unsigned long int __cpu_mask;
14 
15 /* Basic access functions.  */
16 # define __CPUELT(cpu)	((cpu) / __NCPUBITS)
17 # define __CPUMASK(cpu)	((__cpu_mask) 1 << ((cpu) % __NCPUBITS))
18 
19 /* Data structure to describe CPU mask.  */
20 typedef struct
21 {
22   __cpu_mask __bits[__CPU_SETSIZE / __NCPUBITS];
23 } cpu_set_t;
24 
25 /* Access functions for CPU masks.  */
26 # define __CPU_ZERO(cpusetp) \
27   do {									      \
28     unsigned int __i;							      \
29     cpu_set_t *__arr = (cpusetp);					      \
30     for (__i = 0; __i < sizeof (cpu_set_t) / sizeof (__cpu_mask); ++__i)      \
31       __arr->__bits[__i] = 0;						      \
32   } while (0)
33 # define __CPU_SET(cpu, cpusetp) \
34   ((cpusetp)->__bits[__CPUELT (cpu)] |= __CPUMASK (cpu))
35 # define __CPU_CLR(cpu, cpusetp) \
36   ((cpusetp)->__bits[__CPUELT (cpu)] &= ~__CPUMASK (cpu))
37 # define __CPU_ISSET(cpu, cpusetp) \
38   (((cpusetp)->__bits[__CPUELT (cpu)] & __CPUMASK (cpu)) != 0)
39 
40 /* Access macros for `cpu_set'.  */
41 #define CPU_SETSIZE __CPU_SETSIZE
42 #define CPU_SET(cpu, cpusetp)	__CPU_SET (cpu, cpusetp)
43 #define CPU_CLR(cpu, cpusetp)	__CPU_CLR (cpu, cpusetp)
44 #define CPU_ISSET(cpu, cpusetp)	__CPU_ISSET (cpu, cpusetp)
45 #define CPU_ZERO(cpusetp)	__CPU_ZERO (cpusetp)
46 
47 #endif
48