creds.h \
err-ptr.h \
events.h \
+ getcpu.h \
hash.h \
jhash.h \
logging.h \
#include <urcu/compiler.h>
#include <urcu/uatomic.h>
#include "common/bitmap.h"
-#include "lib/lttng-ust/getcpu.h"
+#include "common/getcpu.h"
/*
* Using unsigned arithmetic because overflow is defined.
--- /dev/null
+/*
+ * SPDX-License-Identifier: LGPL-2.1-only
+ *
+ * Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ */
+
+#ifndef _UST_COMMON_GETCPU_H
+#define _UST_COMMON_GETCPU_H
+
+#include <urcu/compiler.h>
+#include <urcu/system.h>
+#include <urcu/arch.h>
+
+#include <lttng/ust-getcpu.h>
+
+/*
+ * Function pointer to the user provided getcpu callback, can be set at library
+ * initialization by a dlopened plugin or at runtime by a user by calling
+ * lttng_ust_getcpu_override() from the public API.
+ *
+ * This is an ABI symbol of liblttng-ust-common accessed by other libraries
+ * through the static inline function in this file. It is initialised in the
+ * liblttng-ust-common constructor.
+ */
+extern int (*lttng_ust_get_cpu_sym)(void);
+
+#ifdef LTTNG_UST_DEBUG_VALGRIND
+
+/*
+ * Fallback on cpu 0 if liblttng-ust is build with Valgrind support.
+ * get_cpu() returns the current CPU number. It may change due to
+ * migration, so it is only statistically accurate.
+ */
+static inline
+int lttng_ust_get_cpu_internal(void)
+{
+ return 0;
+}
+
+#else
+
+/*
+ * sched_getcpu.
+ */
+#ifdef __linux__
+
+#if !HAVE_SCHED_GETCPU
+#include <sys/syscall.h>
+#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_internal(void)
+{
+ int cpu, ret;
+
+ ret = __getcpu(&cpu, NULL, NULL);
+ if (caa_unlikely(ret < 0))
+ return 0;
+ return cpu;
+}
+#else /* HAVE_SCHED_GETCPU */
+#include <sched.h>
+
+/*
+ * If getcpu is not implemented in the kernel, use cpu 0 as fallback.
+ */
+static inline
+int lttng_ust_get_cpu_internal(void)
+{
+ int cpu;
+
+ cpu = sched_getcpu();
+ if (caa_unlikely(cpu < 0))
+ return 0;
+ return cpu;
+}
+#endif /* HAVE_SCHED_GETCPU */
+
+#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_internal(void)
+{
+ return 0;
+}
+
+#else
+#error "Please add support for your OS into liblttng-ust/compat.h."
+#endif
+
+#endif
+
+static inline
+int lttng_ust_get_cpu(void)
+{
+ int (*lttng_ust_get_cpu_current)(void) = CMM_LOAD_SHARED(lttng_ust_get_cpu_sym);
+
+ /*
+ * Fallback to the internal getcpu implementation if no override was
+ * provided the user.
+ */
+ if (caa_likely(!lttng_ust_get_cpu_current)) {
+ return lttng_ust_get_cpu_internal();
+ } else {
+ return lttng_ust_get_cpu_current();
+ }
+}
+
+#endif /* _LTTNG_GETCPU_H */
#include <urcu/compiler.h>
-#include "lib/lttng-ust/getcpu.h"
+#include "common/getcpu.h"
#include "frontend.h"
/**
clock.h \
fd-tracker.c \
fd-tracker.h \
+ getcpu.c \
+ getcpu.h \
ust-common.c \
lttng-ust-urcu.c \
lttng-ust-urcu-pointer.c
--- /dev/null
+/*
+ * SPDX-License-Identifier: LGPL-2.1-only
+ *
+ * Copyright (C) 2014 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ */
+
+#define _LGPL_SOURCE
+#include <dlfcn.h>
+#include <stdlib.h>
+#include <urcu/system.h>
+#include <urcu/arch.h>
+
+#include "common/getcpu.h"
+#include "common/getenv.h"
+#include "common/logging.h"
+
+#include "lib/lttng-ust-common/getcpu.h"
+
+/* Function pointer to the current getcpu callback. */
+int (*lttng_ust_get_cpu_sym)(void);
+
+static
+void *getcpu_plugin_handle;
+
+/*
+ * Override the user provided getcpu implementation.
+ */
+int lttng_ust_getcpu_override(int (*getcpu)(void))
+{
+ CMM_STORE_SHARED(lttng_ust_get_cpu_sym, getcpu);
+ return 0;
+}
+
+/*
+ * Initialize the getcpu plugin if it's present.
+ */
+void lttng_ust_getcpu_plugin_init(void)
+{
+ const char *libname;
+ void (*getcpu_plugin_init)(void);
+
+ /* If a plugin is already loaded, do nothing. */
+ if (getcpu_plugin_handle)
+ return;
+
+ /*
+ * If the LTTNG_UST_GETCPU_PLUGIN environment variable is undefined, do
+ * nothing.
+ */
+ libname = lttng_ust_getenv("LTTNG_UST_GETCPU_PLUGIN");
+ if (!libname)
+ return;
+
+ /*
+ * Thy to dlopen the getcpu plugin shared object specified in
+ * LTTNG_UST_GETCPU_PLUGIN.
+ */
+ getcpu_plugin_handle = dlopen(libname, RTLD_NOW);
+ if (!getcpu_plugin_handle) {
+ PERROR("Cannot load LTTng UST getcpu override library %s",
+ libname);
+ return;
+ }
+ dlerror();
+
+ /* Locate the getcpu plugin init function in the shared object. */
+ getcpu_plugin_init = (void (*)(void)) dlsym(getcpu_plugin_handle,
+ "lttng_ust_getcpu_plugin_init");
+ if (!getcpu_plugin_init) {
+ PERROR("Cannot find LTTng UST getcpu override library %s initialization function lttng_ust_getcpu_plugin_init()",
+ libname);
+ return;
+ }
+
+ /* Run the user provided getcpu plugin init function. */
+ getcpu_plugin_init();
+}
--- /dev/null
+/*
+ * SPDX-License-Identifier: LGPL-2.1-only
+ *
+ * Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ */
+
+#ifndef _LTTNG_UST_COMMON_GETCPU_H
+#define _LTTNG_UST_COMMON_GETCPU_H
+
+/*
+ * Initialize the getcpu plugin if it's present.
+ */
+void lttng_ust_getcpu_plugin_init(void)
+ __attribute__((visibility("hidden")));
+
+
+#endif /* _LTTNG_UST_COMMON_GETCPU_H */
#include "lib/lttng-ust-common/fd-tracker.h"
#include "lib/lttng-ust-common/clock.h"
+#include "lib/lttng-ust-common/getcpu.h"
/*
* The liblttng-ust-common constructor, initialize the internal shared state.
* Initialize the potential user-provided clock plugin.
*/
lttng_ust_clock_init();
+
+ /*
+ * Initialize the potential user-provided getcpu plugin.
+ */
+ lttng_ust_getcpu_plugin_init();
}
void lttng_ust_common_alloc_tls(void)
lttng-ring-buffer-metadata-client.c \
lttng-counter-client.h \
lttng-counter-client-percpu-32-modular.c \
- lttng-counter-client-percpu-64-modular.c \
- getcpu.c getcpu.h
+ lttng-counter-client-percpu-64-modular.c
liblttng_ust_la_SOURCES =
+++ /dev/null
-/*
- * SPDX-License-Identifier: LGPL-2.1-only
- *
- * Copyright (C) 2014 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- */
-
-#define _LGPL_SOURCE
-#include <dlfcn.h>
-#include <stdlib.h>
-#include "common/logging.h"
-#include <urcu/system.h>
-#include <urcu/arch.h>
-
-#include "common/getenv.h"
-#include "lib/lttng-ust/getcpu.h"
-
-/* Function pointer to the current getcpu callback. */
-int (*lttng_ust_get_cpu_sym)(void);
-
-static
-void *getcpu_plugin_handle;
-
-/*
- * Override the user provided getcpu implementation.
- */
-int lttng_ust_getcpu_override(int (*getcpu)(void))
-{
- CMM_STORE_SHARED(lttng_ust_get_cpu_sym, getcpu);
- return 0;
-}
-
-/*
- * Initialize the getcpu plugin if it's present.
- */
-void lttng_ust_getcpu_plugin_init(void)
-{
- const char *libname;
- void (*getcpu_plugin_init)(void);
-
- /* If a plugin is already loaded, do nothing. */
- if (getcpu_plugin_handle)
- return;
-
- /*
- * If the LTTNG_UST_GETCPU_PLUGIN environment variable is undefined, do
- * nothing.
- */
- libname = lttng_ust_getenv("LTTNG_UST_GETCPU_PLUGIN");
- if (!libname)
- return;
-
- /*
- * Thy to dlopen the getcpu plugin shared object specified in
- * LTTNG_UST_GETCPU_PLUGIN.
- */
- getcpu_plugin_handle = dlopen(libname, RTLD_NOW);
- if (!getcpu_plugin_handle) {
- PERROR("Cannot load LTTng UST getcpu override library %s",
- libname);
- return;
- }
- dlerror();
-
- /* Locate the getcpu plugin init function in the shared object. */
- getcpu_plugin_init = (void (*)(void)) dlsym(getcpu_plugin_handle,
- "lttng_ust_getcpu_plugin_init");
- if (!getcpu_plugin_init) {
- PERROR("Cannot find LTTng UST getcpu override library %s initialization function lttng_ust_getcpu_plugin_init()",
- libname);
- return;
- }
-
- /* Run the user provided getcpu plugin init function. */
- getcpu_plugin_init();
-}
+++ /dev/null
-/*
- * SPDX-License-Identifier: LGPL-2.1-only
- *
- * Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- */
-
-#ifndef _LTTNG_GETCPU_H
-#define _LTTNG_GETCPU_H
-
-#include <urcu/compiler.h>
-#include <urcu/system.h>
-#include <urcu/arch.h>
-
-#include <lttng/ust-getcpu.h>
-
-
-/*
- * Initialize the getcpu plugin if it's present.
- */
-void lttng_ust_getcpu_plugin_init(void)
- __attribute__((visibility("hidden")));
-
-/*
- * Function pointer to the user provided getcpu callback, can be set at library
- * initialization by a dlopened plugin or at runtime by a user by calling
- * lttng_ust_getcpu_override() from the public API.
- */
-extern int (*lttng_ust_get_cpu_sym)(void)
- __attribute__((visibility("hidden")));
-
-#ifdef LTTNG_UST_DEBUG_VALGRIND
-
-/*
- * Fallback on cpu 0 if liblttng-ust is build with Valgrind support.
- * get_cpu() returns the current CPU number. It may change due to
- * migration, so it is only statistically accurate.
- */
-static inline
-int lttng_ust_get_cpu_internal(void)
-{
- return 0;
-}
-
-#else
-
-/*
- * sched_getcpu.
- */
-#ifdef __linux__
-
-#if !HAVE_SCHED_GETCPU
-#include <sys/syscall.h>
-#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_internal(void)
-{
- int cpu, ret;
-
- ret = __getcpu(&cpu, NULL, NULL);
- if (caa_unlikely(ret < 0))
- return 0;
- return cpu;
-}
-#else /* HAVE_SCHED_GETCPU */
-#include <sched.h>
-
-/*
- * If getcpu is not implemented in the kernel, use cpu 0 as fallback.
- */
-static inline
-int lttng_ust_get_cpu_internal(void)
-{
- int cpu;
-
- cpu = sched_getcpu();
- if (caa_unlikely(cpu < 0))
- return 0;
- return cpu;
-}
-#endif /* HAVE_SCHED_GETCPU */
-
-#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_internal(void)
-{
- return 0;
-}
-
-#else
-#error "Please add support for your OS into liblttng-ust/compat.h."
-#endif
-
-#endif
-
-static inline
-int lttng_ust_get_cpu(void)
-{
- int (*lttng_ust_get_cpu_current)(void) = CMM_LOAD_SHARED(lttng_ust_get_cpu_sym);
-
- /*
- * Fallback to the internal getcpu implementation if no override was
- * provided the user.
- */
- if (caa_likely(!lttng_ust_get_cpu_current)) {
- return lttng_ust_get_cpu_internal();
- } else {
- return lttng_ust_get_cpu_current();
- }
-}
-
-#endif /* _LTTNG_GETCPU_H */
#include <limits.h>
#include <lttng/ust-events.h>
#include <lttng/ust-tracer.h>
-#include "lib/lttng-ust/getcpu.h"
#include <lttng/ust-ringbuffer-context.h>
+#include "common/getcpu.h"
+
#include "context-internal.h"
static
#include "common/ringbuffer/rb-init.h"
#include "lttng-ust-statedump.h"
#include "common/clock.h"
-#include "lib/lttng-ust/getcpu.h"
#include "common/getenv.h"
#include "lib/lttng-ust/events.h"
#include "context-internal.h"
lttng_ust_common_ctor();
lttng_ust_tp_init();
- lttng_ust_getcpu_plugin_init();
lttng_ust_statedump_init();
lttng_ust_ring_buffer_clients_init();
lttng_ust_counter_clients_init();