From d6ddec3f8a747381dfb2af999731b83379713960 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Wed, 28 Nov 2018 16:56:59 -0500 Subject: [PATCH] Adapt lttng-ust to use multiflavor symbols from liburcu 0.11 Signed-off-by: Mathieu Desnoyers --- configure.ac | 6 +++--- include/lttng/tracepoint-rcu.h | 6 +++--- liblttng-ust/lttng-ust-comm.c | 5 +++-- liblttng-ust/tracepoint-internal.h | 2 +- liblttng-ust/tracepoint.c | 14 +++++++------- 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/configure.ac b/configure.ac index f90c5ba..c2280dc 100644 --- a/configure.ac +++ b/configure.ac @@ -246,10 +246,10 @@ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ ]) # urcu - check that URCU lib is available to compilation -AC_CHECK_LIB([urcu-bp], [synchronize_rcu_bp], [], [AC_MSG_ERROR([Cannot find liburcu-bp lib. Use [LDFLAGS]=-Ldir to specify its location.])]) +AC_CHECK_LIB([urcu-bp], [urcu_bp_synchronize_rcu], [], [AC_MSG_ERROR([Cannot find liburcu-bp 0.11 or newer. Use [LDFLAGS]=-Ldir to specify its location.])]) -# urcu - check that URCU lib is at least version 0.6 -AC_CHECK_LIB([urcu-bp], [call_rcu_bp], [], [AC_MSG_ERROR([liburcu 0.6 or newer is needed, please update your version or use [LDFLAGS]=-Ldir to specify the right location.])]) +# urcu - check that URCU lib is at least version 0.11 +AC_CHECK_LIB([urcu-bp], [urcu_bp_call_rcu], [], [AC_MSG_ERROR([liburcu 0.11 or newer is needed, please update your version or use [LDFLAGS]=-Ldir to specify the right location.])]) # optional linux/perf_event.h AC_CHECK_HEADERS([linux/perf_event.h], [have_perf_event=yes], []) diff --git a/include/lttng/tracepoint-rcu.h b/include/lttng/tracepoint-rcu.h index 0e08485..95d6049 100644 --- a/include/lttng/tracepoint-rcu.h +++ b/include/lttng/tracepoint-rcu.h @@ -27,10 +27,10 @@ #ifdef _LGPL_SOURCE -#include +#include -#define tp_rcu_read_lock_bp rcu_read_lock_bp -#define tp_rcu_read_unlock_bp rcu_read_unlock_bp +#define tp_rcu_read_lock_bp urcu_bp_read_lock +#define tp_rcu_read_unlock_bp urcu_bp_read_unlock #define tp_rcu_dereference_bp rcu_dereference #define TP_RCU_LINK_TEST() 1 diff --git a/liblttng-ust/lttng-ust-comm.c b/liblttng-ust/lttng-ust-comm.c index 511b9cf..b8b3314 100644 --- a/liblttng-ust/lttng-ust-comm.c +++ b/liblttng-ust/lttng-ust-comm.c @@ -1908,6 +1908,7 @@ void ust_before_fork(sigset_t *save_sigset) ust_lock_nocheck(); rcu_bp_before_fork(); + urcu_bp_before_fork(); } static void ust_after_fork_common(sigset_t *restore_sigset) @@ -1931,7 +1932,7 @@ void ust_after_fork_parent(sigset_t *restore_sigset) if (URCU_TLS(lttng_ust_nest_count)) return; DBG("process %d", getpid()); - rcu_bp_after_fork_parent(); + urcu_bp_after_fork_parent(); /* Release mutexes and reenable signals */ ust_after_fork_common(restore_sigset); } @@ -1952,7 +1953,7 @@ void ust_after_fork_child(sigset_t *restore_sigset) lttng_context_vtid_reset(); DBG("process %d", getpid()); /* Release urcu mutexes */ - rcu_bp_after_fork_child(); + urcu_bp_after_fork_child(); lttng_ust_cleanup(0); /* Release mutexes and reenable signals */ ust_after_fork_common(restore_sigset); diff --git a/liblttng-ust/tracepoint-internal.h b/liblttng-ust/tracepoint-internal.h index 298f78e..1e6f92b 100644 --- a/liblttng-ust/tracepoint-internal.h +++ b/liblttng-ust/tracepoint-internal.h @@ -50,7 +50,7 @@ extern void __tracepoint_probe_prune_release_queue(void); */ static inline void tracepoint_synchronize_unregister(void) { - synchronize_rcu_bp(); + urcu_bp_synchronize_rcu(); } extern void init_tracepoint(void); diff --git a/liblttng-ust/tracepoint.c b/liblttng-ust/tracepoint.c index 14b8231..1c27e40 100644 --- a/liblttng-ust/tracepoint.c +++ b/liblttng-ust/tracepoint.c @@ -26,7 +26,7 @@ #include #include -#include +#include #include #include #include @@ -149,7 +149,7 @@ static void release_probes(void *old) if (old) { struct tp_probes *tp_probes = caa_container_of(old, struct tp_probes, probes[0]); - synchronize_rcu(); + urcu_bp_synchronize_rcu(); free(tp_probes); } } @@ -709,7 +709,7 @@ void __tracepoint_probe_prune_release_queue(void) release_queue_need_update = 0; /* Wait for grace period between all sync_callsites and free. */ - synchronize_rcu(); + urcu_bp_synchronize_rcu(); cds_list_for_each_entry_safe(pos, next, &release_probes, u.list) { cds_list_del(&pos->u.list); @@ -800,7 +800,7 @@ void tracepoint_probe_update_all(void) tracepoint_update_probes(); /* Wait for grace period between update_probes and free. */ - synchronize_rcu(); + urcu_bp_synchronize_rcu(); cds_list_for_each_entry_safe(pos, next, &release_probes, u.list) { cds_list_del(&pos->u.list); free(pos); @@ -946,15 +946,15 @@ void exit_tracepoint(void) void tp_rcu_read_lock_bp(void) { - rcu_read_lock_bp(); + urcu_bp_read_lock(); } void tp_rcu_read_unlock_bp(void) { - rcu_read_unlock_bp(); + urcu_bp_read_unlock(); } void *tp_rcu_dereference_sym_bp(void *p) { - return rcu_dereference_bp(p); + return urcu_bp_dereference(p); } -- 2.27.0