Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf tools: Add fallback versions for CPU_{OR,EQUAL}()

From the glibc sources, so that we can keep the tooling buildable in
older systems while using recent sched.h CPU_ macros.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lkml.kernel.org/n/tip-hvm9ysmrjip75ebdzhzoh429@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

+50
+50
tools/perf/util/cpu-set-sched.h
··· 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