X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=libringbuffer%2Fgetcpu.h;h=3474bfe0c04f9f218eac190b001b08600f9d8272;hb=dbafbbf5527d2e291b216216fd2c5b7dc4df66ed;hp=104ba7601c6bc58598833d4e7acc9374e6262e4f;hpb=48621a4272bdeb1e8fced511ca6bf3c4c2240c15;p=lttng-ust.git diff --git a/libringbuffer/getcpu.h b/libringbuffer/getcpu.h index 104ba760..3474bfe0 100644 --- a/libringbuffer/getcpu.h +++ b/libringbuffer/getcpu.h @@ -20,7 +20,6 @@ */ #include -#include #ifdef UST_VALGRIND @@ -37,6 +36,30 @@ int lttng_ust_get_cpu(void) #else +/* + * sched_getcpu. + */ +#ifdef __linux__ + +#ifdef __UCLIBC__ +#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. */ @@ -50,6 +73,23 @@ int lttng_ust_get_cpu(void) return 0; return cpu; } +#endif /* __UCLIBC__ */ + +#elif defined(__FreeBSD__) + +/* + * FreeBSD does 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