From bfe459fb42007f41d7c26efc6fec349a0e4e5f0b Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Mon, 20 Feb 2012 20:12:04 -0500 Subject: [PATCH] Add freebsd support for getcpu (use cpu nr 0) commit 08bf1cc1c8731a717e253932f3e36672b0476078 upstream. Signed-off-by: Mathieu Desnoyers Signed-off-by: Christian Babeux --- liblttng-ust/compat.h | 22 ---------------------- libringbuffer/getcpu.h | 42 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 23 deletions(-) diff --git a/liblttng-ust/compat.h b/liblttng-ust/compat.h index 803cc12d..2690a760 100644 --- a/liblttng-ust/compat.h +++ b/liblttng-ust/compat.h @@ -19,28 +19,6 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -/* - * sched_getcpu. - */ -#ifdef __linux__ - -#ifdef __UCLIBC__ -#include -#define __getcpu(cpu, node, cache) syscall(__NR_getcpu, cpu, node, cache) -static inline -int sched_getcpu(void) -{ - int c, s; - - s = __getcpu(&c, NULL, NULL); - return (s == -1) ? s : c; -} -#endif /* __UCLIBC__ */ - -#else -#error "Please add support for your OS into liblttng-ust/compat.h." -#endif - /* * lttng_ust_getprocname. */ diff --git a/libringbuffer/getcpu.h b/libringbuffer/getcpu.h index 44d0d559..0a619417 100644 --- a/libringbuffer/getcpu.h +++ b/libringbuffer/getcpu.h @@ -20,7 +20,6 @@ */ #include -#include #ifdef LTTNG_UST_DEBUG_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 -- 2.34.1