linux/kernel/trace
Steven Rostedt 93eb677d74 ftrace: use module notifier for function tracer
The hooks in the module code for the function tracer must be called
before any of that module code runs. The function tracer hooks
modify the module (replacing calls to mcount to nops). If the code
is executed while the change occurs, then the CPU can take a GPF.

To handle the above with a bit of paranoia, I originally implemented
the hooks as calls directly from the module code.

After examining the notifier calls, it looks as though the start up
notify is called before any of the module's code is executed. This makes
the use of the notify safe with ftrace.

Only the startup notify is required to be "safe". The shutdown simply
removes the entries from the ftrace function list, and does not modify
any code.

This change has another benefit. It removes a issue with a reverse dependency
in the mutexes of ftrace_lock and module_mutex.

[ Impact: fix lock dependency bug, cleanup ]

Cc: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2009-04-17 16:59:15 +02:00
..
blktrace.c blktrace: fix context-info when mixed-using blk tracer and trace events 2009-04-16 10:11:01 +02:00
ftrace.c ftrace: use module notifier for function tracer 2009-04-17 16:59:15 +02:00
Kconfig Merge branch 'linus' into tracing/core 2009-04-14 00:02:22 +02:00
kmemtrace.c tracing/filters: use ring_buffer_discard_commit() in filter_check_discard() 2009-04-14 00:00:56 +02:00
Makefile tracing/events: move the ftrace event tracing code to core 2009-04-14 12:57:59 -04:00
ring_buffer.c ring-buffer: add ring_buffer_discard_commit 2009-04-14 00:00:53 +02:00
trace_boot.c tracing: use macros to denote usec and nsec per second 2009-04-07 14:43:06 +02:00
trace_branch.c tracing/filters: use ring_buffer_discard_commit() in filter_check_discard() 2009-04-14 00:00:56 +02:00
trace_clock.c tracing: fix four sparse warnings 2009-03-22 18:16:54 +01:00
trace_event_profile.c tracing/events: convert event call sites to use a link list 2009-04-14 12:58:00 -04:00
trace_event_types.h tracing/filters: add TRACE_EVENT_FORMAT_NOFILTER event macro 2009-04-14 00:00:51 +02:00
trace_events_filter.c tracing/events: add export symbols for trace events in modules 2009-04-14 12:58:01 -04:00
trace_events.c tracing/events: fix compile for modules disabled 2009-04-14 22:04:19 -04:00
trace_export.c tracing/filters: allow on-the-fly filter switching 2009-04-14 00:03:55 +02:00
trace_functions_graph.c function-graph: add option to calculate graph time or not 2009-03-24 23:41:11 -04:00
trace_functions.c tracing/core: use appropriate waiting on trace_pipe 2009-02-18 01:40:20 +01:00
trace_hw_branches.c tracing/filters: use ring_buffer_discard_commit() in filter_check_discard() 2009-04-14 00:00:56 +02:00
trace_irqsoff.c tracing: have latency tracers set the latency format 2009-03-04 22:15:30 -05:00
trace_mmiotrace.c tracing: use macros to denote usec and nsec per second 2009-04-07 14:43:06 +02:00
trace_nop.c tracing/ftrace: make nop-tracer use polling wait for events on pipe 2009-03-23 09:22:15 +01:00
trace_output.c tracing/events: add export symbols for trace events in modules 2009-04-14 12:58:01 -04:00
trace_output.h tracing/events: move declarations from trace directory to core include 2009-04-14 12:57:58 -04:00
trace_power.c tracing/filters: use ring_buffer_discard_commit() in filter_check_discard() 2009-04-14 00:00:56 +02:00
trace_printk.c tracing/ftrace: factorize the tracing files creation 2009-04-07 14:43:07 +02:00
trace_sched_switch.c tracing/events: move trace point headers into include/trace/events 2009-04-14 22:05:43 -04:00
trace_sched_wakeup.c tracing/events: move trace point headers into include/trace/events 2009-04-14 22:05:43 -04:00
trace_selftest_dynamic.c ftrace: fix dynamic ftrace selftest 2008-05-23 21:13:23 +02:00
trace_selftest.c tracing: keep the tracing buffer after self-test failure 2009-03-22 15:17:21 +01:00
trace_stack.c tracing/ftrace: factorize the tracing files creation 2009-04-07 14:43:07 +02:00
trace_stat.c Merge branch 'linus' into tracing/core 2009-04-07 13:47:45 +02:00
trace_stat.h tracing: add handler to trace_stat 2009-03-24 23:22:58 -04:00
trace_syscalls.c tracing/syscalls: use a dedicated file header 2009-04-09 05:43:32 +02:00
trace_sysprof.c tracing/ftrace: factorize the tracing files creation 2009-04-07 14:43:07 +02:00
trace_workqueue.c Merge branch 'linus' into tracing/core 2009-04-07 13:47:45 +02:00
trace.c tracing/events: add export symbols for trace events in modules 2009-04-14 12:58:01 -04:00
trace.h tracing/events: convert event call sites to use a link list 2009-04-14 12:58:00 -04:00