| // SPDX-License-Identifier: LGPL-2.1 | |
| // Definitions taken from glibc for use with older systems, same licensing. | |
| #ifndef _CPU_SET_SCHED_PERF_H | |
| #define _CPU_SET_SCHED_PERF_H | |
| #include <features.h> | |
| #include <sched.h> | |
| #ifndef CPU_EQUAL | |
| #ifndef __CPU_EQUAL_S | |
| #if __GNUC_PREREQ (2, 91) | |
| # define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \ | |
| (__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0) | |
| #else | |
| # define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \ | |
| (__extension__ \ | |
| ({ const __cpu_mask *__arr1 = (cpusetp1)->__bits; \ | |
| const __cpu_mask *__arr2 = (cpusetp2)->__bits; \ | |
| size_t __imax = (setsize) / sizeof (__cpu_mask); \ | |
| size_t __i; \ | |
| for (__i = 0; __i < __imax; ++__i) \ | |
| if (__arr1[__i] != __arr2[__i]) \ | |
| break; \ | |
| __i == __imax; })) | |
| #endif | |
| #endif // __CPU_EQUAL_S | |
| #define CPU_EQUAL(cpusetp1, cpusetp2) \ | |
| __CPU_EQUAL_S (sizeof (cpu_set_t), cpusetp1, cpusetp2) | |
| #endif // CPU_EQUAL | |
| #ifndef CPU_OR | |
| #ifndef __CPU_OP_S | |
| #define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \ | |
| (__extension__ \ | |
| ({ cpu_set_t *__dest = (destset); \ | |
| const __cpu_mask *__arr1 = (srcset1)->__bits; \ | |
| const __cpu_mask *__arr2 = (srcset2)->__bits; \ | |
| size_t __imax = (setsize) / sizeof (__cpu_mask); \ | |
| size_t __i; \ | |
| for (__i = 0; __i < __imax; ++__i) \ | |
| ((__cpu_mask *) __dest->__bits)[__i] = __arr1[__i] op __arr2[__i]; \ | |
| __dest; })) | |
| #endif // __CPU_OP_S | |
| #define CPU_OR(destset, srcset1, srcset2) \ | |
| __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, |) | |
| #endif // CPU_OR | |
| #endif // _CPU_SET_SCHED_PERF_H |