X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=libringbuffer%2Fgetcpu.h;h=190eae6c3d39bf131815e57b05c079c772ff103f;hb=refs%2Fheads%2Fstable-2.5;hp=f5f2f67571947b6c89d693ba8b9e28777f63cd89;hpb=2b2d6ff75efc17aa74ea9b0a7f8c756d812804bb;p=lttng-ust.git diff --git a/libringbuffer/getcpu.h b/libringbuffer/getcpu.h index f5f2f675..190eae6c 100644 --- a/libringbuffer/getcpu.h +++ b/libringbuffer/getcpu.h @@ -19,11 +19,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#define _GNU_SOURCE #include -#include -#ifdef UST_VALGRIND +#ifdef LTTNG_UST_DEBUG_VALGRIND /* * Fallback on cpu 0 if liblttng-ust is build with Valgrind support. @@ -38,6 +36,33 @@ int lttng_ust_get_cpu(void) #else +/* + * sched_getcpu. + */ +#ifdef __linux__ + +/* old uClibc versions didn't have sched_getcpu */ +#if defined(__UCLIBC__) && __UCLIBC_MAJOR__ == 0 && \ + (__UCLIBC_MINOR__ < 9 || \ + (__UCLIBC_MINOR__ == 9 && __UCLIBC_SUBLEVEL__ <= 32)) +#include +#define __getcpu(cpu, node, cache) syscall(__NR_getcpu, cpu, node, cache) +/* + * If getcpu is not implemented in the kernel, use cpu 0 as fallback. + */ +static inline +int lttng_ust_get_cpu(void) +{ + int cpu, ret; + + ret = __getcpu(&cpu, NULL, NULL); + if (caa_unlikely(ret < 0)) + return 0; + return c; +} +#else /* __UCLIBC__ */ +#include + /* * If getcpu is not implemented in the kernel, use cpu 0 as fallback. */ @@ -51,6 +76,23 @@ int lttng_ust_get_cpu(void) return 0; return cpu; } +#endif /* __UCLIBC__ */ + +#elif (defined(__FreeBSD__) || defined(__CYGWIN__)) + +/* + * FreeBSD and Cygwin do not allow query of CPU ID. Always use CPU + * number 0, with the assocated performance degradation on SMP. + */ +static inline +int lttng_ust_get_cpu(void) +{ + return 0; +} + +#else +#error "Please add support for your OS into liblttng-ust/compat.h." +#endif #endif