aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace_output.c
diff options
context:
space:
mode:
authorPeter Zijlstra <peterz@infradead.org>2016-03-18 11:28:04 -0400
committerSteven Rostedt <rostedt@goodmis.org>2016-03-22 18:04:10 -0400
commit7e6867bf831c71fe0e47438831ae3a94d4c7ab3c (patch)
treeaff6902663d850f314a23900a8caebf9a78e2a86 /kernel/trace/trace_output.c
parent3debb0a9ddb16526de8b456491b7db60114f7b5e (diff)
tracing: Record and show NMI state
The latency tracer format has a nice column to indicate IRQ state, but this is not able to tell us about NMI state. When tracing perf interrupt handlers (which often run in NMI context) it is very useful to see how the events nest. Link: http://lkml.kernel.org/r/20160318153022.105068893@infradead.org Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace/trace_output.c')
-rw-r--r--kernel/trace/trace_output.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
index 282982195e09..0bb9cf2d53e6 100644
--- a/kernel/trace/trace_output.c
+++ b/kernel/trace/trace_output.c
@@ -389,7 +389,9 @@ int trace_print_lat_fmt(struct trace_seq *s, struct trace_entry *entry)
389 char irqs_off; 389 char irqs_off;
390 int hardirq; 390 int hardirq;
391 int softirq; 391 int softirq;
392 int nmi;
392 393
394 nmi = entry->flags & TRACE_FLAG_NMI;
393 hardirq = entry->flags & TRACE_FLAG_HARDIRQ; 395 hardirq = entry->flags & TRACE_FLAG_HARDIRQ;
394 softirq = entry->flags & TRACE_FLAG_SOFTIRQ; 396 softirq = entry->flags & TRACE_FLAG_SOFTIRQ;
395 397
@@ -415,10 +417,12 @@ int trace_print_lat_fmt(struct trace_seq *s, struct trace_entry *entry)
415 } 417 }
416 418
417 hardsoft_irq = 419 hardsoft_irq =
420 (nmi && hardirq) ? 'Z' :
421 nmi ? 'z' :
418 (hardirq && softirq) ? 'H' : 422 (hardirq && softirq) ? 'H' :
419 hardirq ? 'h' : 423 hardirq ? 'h' :
420 softirq ? 's' : 424 softirq ? 's' :
421 '.'; 425 '.' ;
422 426
423 trace_seq_printf(s, "%c%c%c", 427 trace_seq_printf(s, "%c%c%c",
424 irqs_off, need_resched, hardsoft_irq); 428 irqs_off, need_resched, hardsoft_irq);