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