From: Jason Baron <jbaron@redhat.com> Date: Thu, 26 Mar 2009 22:10:15 -0400 Subject: [trace] tracepoints fix reentrancy Message-id: 200903270210.n2R2AFaH029644@ns3.rdu.redhat.com O-Subject: [RHEL 5.4 PATCH 05/10] - tracepoints fix reentrancy Bugzilla: 465543 commit be19b047df594af125965e79ff280b36da485248 tracepoint-fix-reentrancy Tracepoints fix reentrancy The tracepoints had the same problem markers did have wrt reentrancy. Apply a similar fix using a rcu_barrier after each tracepoint mutex lock. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> CC: Ingo Molnar <mingo@elte.hu> CC: "Frank Ch. Eigler" <fche@redhat.com> CC: Lai Jiangshan <laijs@cn.fujitsu.com> diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c index db39961..f2b7c28 100644 --- a/kernel/tracepoint.c +++ b/kernel/tracepoint.c @@ -356,6 +356,8 @@ int tracepoint_probe_register(const char *name, void *probe) mutex_lock(&tracepoints_mutex); entry = get_tracepoint(name); WARN_ON(!entry); + if (entry->rcu_pending) + rcu_barrier_sched(); tracepoint_entry_free_old(entry, old); end: mutex_unlock(&tracepoints_mutex); @@ -392,6 +394,8 @@ int tracepoint_probe_unregister(const char *name, void *probe) entry = get_tracepoint(name); if (!entry) goto end; + if (entry->rcu_pending) + rcu_barrier_sched(); tracepoint_entry_free_old(entry, old); remove_tracepoint(name); /* Ignore busy error message */ ret = 0;