tracing: Only run synchronize_sched() at instance deletion time
authorSteven Rostedt <rostedt@goodmis.org>
Tue, 3 Dec 2013 17:41:20 +0000 (12:41 -0500)
committerSteven Rostedt <rostedt@goodmis.org>
Thu, 5 Dec 2013 19:22:30 +0000 (14:22 -0500)
commit3ccb01239201af06a07482ec686b14cd148102a5
tree5ad078061e71dcf23cd1ee3f4ca353060c185324
parentdc1ccc48159d63eca5089e507c82c7d22ef60839
tracing: Only run synchronize_sched() at instance deletion time

It has been reported that boot up with FTRACE_SELFTEST enabled can take a
very long time. There can be stalls of over a minute.

This was tracked down to the synchronize_sched() called when a system call
event is disabled. As the self tests enable and disable thousands of events,
this makes the synchronize_sched() get called thousands of times.

The synchornize_sched() was added with d562aff93bfb53 "tracing: Add support
for SOFT_DISABLE to syscall events" which caused this regression (added
in 3.13-rc1).

The synchronize_sched() is to protect against the events being accessed
when a tracer instance is being deleted. When an instance is being deleted
all the events associated to it are unregistered. The synchronize_sched()
makes sure that no more users are running when it finishes.

Instead of calling synchronize_sched() for all syscall events, we only
need to call it once, after the events are unregistered and before the
instance is deleted. The event_mutex is held during this action to
prevent new users from enabling events.

Link: http://lkml.kernel.org/r/20131203124120.427b9661@gandalf.local.home
Reported-by: Petr Mladek <pmladek@suse.cz>
Acked-by: Tom Zanussi <tom.zanussi@linux.intel.com>
Acked-by: Petr Mladek <pmladek@suse.cz>
Tested-by: Petr Mladek <pmladek@suse.cz>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
kernel/trace/trace_events.c
kernel/trace/trace_syscalls.c