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