162306a36Sopenharmony_ci// SPDX-License-Identifier: LGPL-2.1 262306a36Sopenharmony_ci// Definitions taken from glibc for use with older systems, same licensing. 362306a36Sopenharmony_ci#ifndef _CPU_SET_SCHED_PERF_H 462306a36Sopenharmony_ci#define _CPU_SET_SCHED_PERF_H 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include <features.h> 762306a36Sopenharmony_ci#include <sched.h> 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#ifndef CPU_EQUAL 1062306a36Sopenharmony_ci#ifndef __CPU_EQUAL_S 1162306a36Sopenharmony_ci#if __GNUC_PREREQ (2, 91) 1262306a36Sopenharmony_ci# define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \ 1362306a36Sopenharmony_ci (__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0) 1462306a36Sopenharmony_ci#else 1562306a36Sopenharmony_ci# define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \ 1662306a36Sopenharmony_ci (__extension__ \ 1762306a36Sopenharmony_ci ({ const __cpu_mask *__arr1 = (cpusetp1)->__bits; \ 1862306a36Sopenharmony_ci const __cpu_mask *__arr2 = (cpusetp2)->__bits; \ 1962306a36Sopenharmony_ci size_t __imax = (setsize) / sizeof (__cpu_mask); \ 2062306a36Sopenharmony_ci size_t __i; \ 2162306a36Sopenharmony_ci for (__i = 0; __i < __imax; ++__i) \ 2262306a36Sopenharmony_ci if (__arr1[__i] != __arr2[__i]) \ 2362306a36Sopenharmony_ci break; \ 2462306a36Sopenharmony_ci __i == __imax; })) 2562306a36Sopenharmony_ci#endif 2662306a36Sopenharmony_ci#endif // __CPU_EQUAL_S 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci#define CPU_EQUAL(cpusetp1, cpusetp2) \ 2962306a36Sopenharmony_ci __CPU_EQUAL_S (sizeof (cpu_set_t), cpusetp1, cpusetp2) 3062306a36Sopenharmony_ci#endif // CPU_EQUAL 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci#ifndef CPU_OR 3362306a36Sopenharmony_ci#ifndef __CPU_OP_S 3462306a36Sopenharmony_ci#define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \ 3562306a36Sopenharmony_ci (__extension__ \ 3662306a36Sopenharmony_ci ({ cpu_set_t *__dest = (destset); \ 3762306a36Sopenharmony_ci const __cpu_mask *__arr1 = (srcset1)->__bits; \ 3862306a36Sopenharmony_ci const __cpu_mask *__arr2 = (srcset2)->__bits; \ 3962306a36Sopenharmony_ci size_t __imax = (setsize) / sizeof (__cpu_mask); \ 4062306a36Sopenharmony_ci size_t __i; \ 4162306a36Sopenharmony_ci for (__i = 0; __i < __imax; ++__i) \ 4262306a36Sopenharmony_ci ((__cpu_mask *) __dest->__bits)[__i] = __arr1[__i] op __arr2[__i]; \ 4362306a36Sopenharmony_ci __dest; })) 4462306a36Sopenharmony_ci#endif // __CPU_OP_S 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci#define CPU_OR(destset, srcset1, srcset2) \ 4762306a36Sopenharmony_ci __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, |) 4862306a36Sopenharmony_ci#endif // CPU_OR 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci#endif // _CPU_SET_SCHED_PERF_H 51