diff options
| author | Steven Rostedt (Red Hat) <rostedt@goodmis.org> | 2013-03-09 00:56:08 -0500 | 
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2013-03-15 00:35:57 -0400 | 
| commit | 1b22e382ab40b0e3ee5abb3e310dffb16fee22aa (patch) | |
| tree | 2e6ca7c130fb6420ba955072275218c7ec287511 /kernel | |
| parent | ca268da6e415448a43138e1abc5d5f057af319d7 (diff) | |
| download | olio-linux-3.10-1b22e382ab40b0e3ee5abb3e310dffb16fee22aa.tar.xz olio-linux-3.10-1b22e382ab40b0e3ee5abb3e310dffb16fee22aa.zip  | |
tracing: Let tracing_snapshot() be used by modules but not NMI
Add EXPORT_SYMBOL_GPL() to let the tracing_snapshot() functions be
called from modules.
Also add a test to see if the snapshot was called from NMI context
and just warn in the tracing buffer if so, and return.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/trace/trace.c | 10 | 
1 files changed, 10 insertions, 0 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index d372c6504c9..5c53e409226 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -442,6 +442,12 @@ void tracing_snapshot(void)  	struct tracer *tracer = tr->current_trace;  	unsigned long flags; +	if (in_nmi()) { +		internal_trace_puts("*** SNAPSHOT CALLED FROM NMI CONTEXT ***\n"); +		internal_trace_puts("*** snapshot is being ignored        ***\n"); +		return; +	} +  	if (!tr->allocated_snapshot) {  		internal_trace_puts("*** SNAPSHOT NOT ALLOCATED ***\n");  		internal_trace_puts("*** stopping trace here!   ***\n"); @@ -460,6 +466,7 @@ void tracing_snapshot(void)  	update_max_tr(tr, current, smp_processor_id());  	local_irq_restore(flags);  } +EXPORT_SYMBOL_GPL(tracing_snapshot);  static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf,  					struct trace_buffer *size_buf, int cpu_id); @@ -493,16 +500,19 @@ void tracing_snapshot_alloc(void)  	tracing_snapshot();  } +EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);  #else  void tracing_snapshot(void)  {  	WARN_ONCE(1, "Snapshot feature not enabled, but internal snapshot used");  } +EXPORT_SYMBOL_GPL(tracing_snapshot);  void tracing_snapshot_alloc(void)  {  	/* Give warning */  	tracing_snapshot();  } +EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);  #endif /* CONFIG_TRACER_SNAPSHOT */  /**  |