xref: /openbmc/linux/tools/perf/util/cpu-set-sched.h (revision 597473720f4dc69749542bfcfed4a927a43d935e)
1*de20e320SArnaldo Carvalho de Melo // SPDX-License-Identifier: LGPL-2.1
2*de20e320SArnaldo Carvalho de Melo // Definitions taken from glibc for use with older systems, same licensing.
3*de20e320SArnaldo Carvalho de Melo #ifndef _CPU_SET_SCHED_PERF_H
4*de20e320SArnaldo Carvalho de Melo #define _CPU_SET_SCHED_PERF_H
5*de20e320SArnaldo Carvalho de Melo 
6*de20e320SArnaldo Carvalho de Melo #include <features.h>
7*de20e320SArnaldo Carvalho de Melo #include <sched.h>
8*de20e320SArnaldo Carvalho de Melo 
9*de20e320SArnaldo Carvalho de Melo #ifndef CPU_EQUAL
10*de20e320SArnaldo Carvalho de Melo #ifndef __CPU_EQUAL_S
11*de20e320SArnaldo Carvalho de Melo #if __GNUC_PREREQ (2, 91)
12*de20e320SArnaldo Carvalho de Melo # define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
13*de20e320SArnaldo Carvalho de Melo   (__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0)
14*de20e320SArnaldo Carvalho de Melo #else
15*de20e320SArnaldo Carvalho de Melo # define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
16*de20e320SArnaldo Carvalho de Melo   (__extension__							      \
17*de20e320SArnaldo Carvalho de Melo    ({ const __cpu_mask *__arr1 = (cpusetp1)->__bits;			      \
18*de20e320SArnaldo Carvalho de Melo       const __cpu_mask *__arr2 = (cpusetp2)->__bits;			      \
19*de20e320SArnaldo Carvalho de Melo       size_t __imax = (setsize) / sizeof (__cpu_mask);			      \
20*de20e320SArnaldo Carvalho de Melo       size_t __i;							      \
21*de20e320SArnaldo Carvalho de Melo       for (__i = 0; __i < __imax; ++__i)				      \
22*de20e320SArnaldo Carvalho de Melo 	if (__arr1[__i] != __arr2[__i])					      \
23*de20e320SArnaldo Carvalho de Melo 	  break;							      \
24*de20e320SArnaldo Carvalho de Melo       __i == __imax; }))
25*de20e320SArnaldo Carvalho de Melo #endif
26*de20e320SArnaldo Carvalho de Melo #endif // __CPU_EQUAL_S
27*de20e320SArnaldo Carvalho de Melo 
28*de20e320SArnaldo Carvalho de Melo #define CPU_EQUAL(cpusetp1, cpusetp2) \
29*de20e320SArnaldo Carvalho de Melo   __CPU_EQUAL_S (sizeof (cpu_set_t), cpusetp1, cpusetp2)
30*de20e320SArnaldo Carvalho de Melo #endif // CPU_EQUAL
31*de20e320SArnaldo Carvalho de Melo 
32*de20e320SArnaldo Carvalho de Melo #ifndef CPU_OR
33*de20e320SArnaldo Carvalho de Melo #ifndef __CPU_OP_S
34*de20e320SArnaldo Carvalho de Melo #define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \
35*de20e320SArnaldo Carvalho de Melo   (__extension__							      \
36*de20e320SArnaldo Carvalho de Melo    ({ cpu_set_t *__dest = (destset);					      \
37*de20e320SArnaldo Carvalho de Melo       const __cpu_mask *__arr1 = (srcset1)->__bits;			      \
38*de20e320SArnaldo Carvalho de Melo       const __cpu_mask *__arr2 = (srcset2)->__bits;			      \
39*de20e320SArnaldo Carvalho de Melo       size_t __imax = (setsize) / sizeof (__cpu_mask);			      \
40*de20e320SArnaldo Carvalho de Melo       size_t __i;							      \
41*de20e320SArnaldo Carvalho de Melo       for (__i = 0; __i < __imax; ++__i)				      \
42*de20e320SArnaldo Carvalho de Melo 	((__cpu_mask *) __dest->__bits)[__i] = __arr1[__i] op __arr2[__i];    \
43*de20e320SArnaldo Carvalho de Melo       __dest; }))
44*de20e320SArnaldo Carvalho de Melo #endif // __CPU_OP_S
45*de20e320SArnaldo Carvalho de Melo 
46*de20e320SArnaldo Carvalho de Melo #define CPU_OR(destset, srcset1, srcset2) \
47*de20e320SArnaldo Carvalho de Melo   __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, |)
48*de20e320SArnaldo Carvalho de Melo #endif // CPU_OR
49*de20e320SArnaldo Carvalho de Melo 
50*de20e320SArnaldo Carvalho de Melo #endif // _CPU_SET_SCHED_PERF_H
51