From: Mathieu Desnoyers Date: Mon, 7 Oct 2019 19:45:46 +0000 (-0400) Subject: Fix: lttng perf counter deadlock X-Git-Tag: v2.12.0-rc1~17 X-Git-Url: http://git.lttng.org/?a=commitdiff_plain;h=20142124a2e34c287a277bbd7ef5b28697735d10;hp=20142124a2e34c287a277bbd7ef5b28697735d10;p=lttng-ust.git Fix: lttng perf counter deadlock Using the ust_lock() to lazily setup the perf counters introduces a scenario where this lock is nested within the urcu-bp read-side lock. However, the LTTNG_UST_WAIT_QUIESCENT ust command requires that urcu-bp synchronize_rcu() is performed with the ust_lock() held. This inter-dependency introduces a deadlock: Thread A Thread B rcu_read_lock() ust_lock() synchronize_rcu() (blocked by rcu read-side lock) ust_lock() <-- deadlock Introduce a new lttng_perf_lock to protect the lttng perf context data structures from concurrent modifications and from fork. This lock can be nested within the ust_lock, but never the opposite. This removes the circular locking dependency involving urcu bp. Fixes: #1202 Signed-off-by: Mathieu Desnoyers ---