aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace
diff options
context:
space:
mode:
authorSteven Rostedt (Red Hat) <rostedt@goodmis.org>2013-03-09 00:56:08 -0500
committerSteven Rostedt <rostedt@goodmis.org>2013-03-15 00:35:57 -0400
commit1b22e382ab40b0e3ee5abb3e310dffb16fee22aa (patch)
tree2e6ca7c130fb6420ba955072275218c7ec287511 /kernel/trace
parentca268da6e415448a43138e1abc5d5f057af319d7 (diff)
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/trace')
-rw-r--r--kernel/trace/trace.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index d372c6504c99..5c53e4092269 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -442,6 +442,12 @@ void tracing_snapshot(void)
442 struct tracer *tracer = tr->current_trace; 442 struct tracer *tracer = tr->current_trace;
443 unsigned long flags; 443 unsigned long flags;
444 444
445 if (in_nmi()) {
446 internal_trace_puts("*** SNAPSHOT CALLED FROM NMI CONTEXT ***\n");
447 internal_trace_puts("*** snapshot is being ignored ***\n");
448 return;
449 }
450
445 if (!tr->allocated_snapshot) { 451 if (!tr->allocated_snapshot) {
446 internal_trace_puts("*** SNAPSHOT NOT ALLOCATED ***\n"); 452 internal_trace_puts("*** SNAPSHOT NOT ALLOCATED ***\n");
447 internal_trace_puts("*** stopping trace here! ***\n"); 453 internal_trace_puts("*** stopping trace here! ***\n");
@@ -460,6 +466,7 @@ void tracing_snapshot(void)
460 update_max_tr(tr, current, smp_processor_id()); 466 update_max_tr(tr, current, smp_processor_id());
461 local_irq_restore(flags); 467 local_irq_restore(flags);
462} 468}
469EXPORT_SYMBOL_GPL(tracing_snapshot);
463 470
464static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf, 471static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf,
465 struct trace_buffer *size_buf, int cpu_id); 472 struct trace_buffer *size_buf, int cpu_id);
@@ -493,16 +500,19 @@ void tracing_snapshot_alloc(void)
493 500
494 tracing_snapshot(); 501 tracing_snapshot();
495} 502}
503EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);
496#else 504#else
497void tracing_snapshot(void) 505void tracing_snapshot(void)
498{ 506{
499 WARN_ONCE(1, "Snapshot feature not enabled, but internal snapshot used"); 507 WARN_ONCE(1, "Snapshot feature not enabled, but internal snapshot used");
500} 508}
509EXPORT_SYMBOL_GPL(tracing_snapshot);
501void tracing_snapshot_alloc(void) 510void tracing_snapshot_alloc(void)
502{ 511{
503 /* Give warning */ 512 /* Give warning */
504 tracing_snapshot(); 513 tracing_snapshot();
505} 514}
515EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);
506#endif /* CONFIG_TRACER_SNAPSHOT */ 516#endif /* CONFIG_TRACER_SNAPSHOT */
507 517
508/** 518/**