X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=include%2Fust%2Fcore.h;h=4e75c515e708893db275adb7bbf699046d9dd429;hb=d4419b81b243bc3a6bdd4a09b3ca2216d044a1c7;hp=8c1c490eedde18b0615741ee1ec1a9773c0589ab;hpb=14641debd03ba299bd06040cb62e0dbdef7fac81;p=lttng-ust.git diff --git a/include/ust/core.h b/include/ust/core.h index 8c1c490e..4e75c515 100644 --- a/include/ust/core.h +++ b/include/ust/core.h @@ -1,9 +1,14 @@ -/* Copyright (C) 2010 Pierre-Marc Fournier +#ifndef UST_CORE_H +#define UST_CORE_H + +/* + * Copyright (C) 2010 Pierre-Marc Fournier + * Copyright (C) 2011 Mathieu Desnoyers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * License as published by the Free Software Foundation; version 2.1 of + * the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -15,14 +20,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef UST_CORE_H -#define UST_CORE_H - #include #include - -#define likely(x) __builtin_expect(!!(x), 1) -#define unlikely(x) __builtin_expect(!!(x), 0) +#include +#include /* ARRAYS */ @@ -42,7 +43,7 @@ /* ERROR OPS */ #define MAX_ERRNO 4095 -#define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO) +#define IS_ERR_VALUE(x) caa_unlikely((x) >= (unsigned long)-MAX_ERRNO) static inline void *ERR_PTR(long error) { @@ -136,4 +137,35 @@ static __inline__ int get_count_order(unsigned int count) #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) #endif +#ifndef UST_VALGRIND + +static __inline__ int ust_get_cpu(void) +{ + int cpu; + + cpu = sched_getcpu(); + if (caa_likely(cpu >= 0)) + return cpu; + /* + * If getcpu(2) is not implemented in the Kernel use CPU 0 as fallback. + */ + return 0; +} + +#else /* #else #ifndef UST_VALGRIND */ + +static __inline__ int ust_get_cpu(void) +{ + /* + * Valgrind does not support the sched_getcpu() vsyscall. + * It causes it to detect a segfault in the program and stop it. + * So if we want to check libust with valgrind, we have to refrain + * from using this call. TODO: it would probably be better to return + * other values too, to better test it. + */ + return 0; +} + +#endif /* #else #ifndef UST_VALGRIND */ + #endif /* UST_CORE_H */