X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=libringbuffer%2Fgetcpu.h;h=fbddb7989336b71235ba238eff9ae860c41a3d6e;hb=5e1b7b8bac9f038e681906b269c1422611c6376d;hp=190eae6c3d39bf131815e57b05c079c772ff103f;hpb=f9364363c8982127d66c2a29cb1fa21760bd00e5;p=lttng-ust.git diff --git a/libringbuffer/getcpu.h b/libringbuffer/getcpu.h index 190eae6c..fbddb798 100644 --- a/libringbuffer/getcpu.h +++ b/libringbuffer/getcpu.h @@ -20,6 +20,12 @@ */ #include +#include +#include + +void lttng_ust_getcpu_init(void); + +extern int (*lttng_get_cpu)(void); #ifdef LTTNG_UST_DEBUG_VALGRIND @@ -29,7 +35,7 @@ * migration, so it is only statistically accurate. */ static inline -int lttng_ust_get_cpu(void) +int lttng_ust_get_cpu_internal(void) { return 0; } @@ -51,7 +57,7 @@ int lttng_ust_get_cpu(void) * If getcpu is not implemented in the kernel, use cpu 0 as fallback. */ static inline -int lttng_ust_get_cpu(void) +int lttng_ust_get_cpu_internal(void) { int cpu, ret; @@ -67,7 +73,7 @@ int lttng_ust_get_cpu(void) * If getcpu is not implemented in the kernel, use cpu 0 as fallback. */ static inline -int lttng_ust_get_cpu(void) +int lttng_ust_get_cpu_internal(void) { int cpu; @@ -85,7 +91,7 @@ int lttng_ust_get_cpu(void) * number 0, with the assocated performance degradation on SMP. */ static inline -int lttng_ust_get_cpu(void) +int lttng_ust_get_cpu_internal(void) { return 0; } @@ -96,4 +102,16 @@ int lttng_ust_get_cpu(void) #endif +static inline +int lttng_ust_get_cpu(void) +{ + int (*getcpu)(void) = CMM_LOAD_SHARED(lttng_get_cpu); + + if (caa_likely(!getcpu)) { + return lttng_ust_get_cpu_internal(); + } else { + return getcpu(); + } +} + #endif /* _LTTNG_GETCPU_H */