aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace_output.c
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2009-09-11 13:55:35 -0400
committerSteven Rostedt <rostedt@goodmis.org>2009-09-11 13:55:35 -0400
commit637e7e864103a7a68c1ce43ada27dfc25c0d113f (patch)
tree7ef0eadf41d79b07bc19f62b1355f7c824d781fd /kernel/trace/trace_output.c
parent48659d31195bb76d688e99dabd816c5472fb1656 (diff)
tracing: add lock depth to entries
This patch adds the lock depth of the big kernel lock to the generic entry header. This way we can see the depth of the lock and help in removing the BKL. Example: # _------=> CPU# # / _-----=> irqs-off # | / _----=> need-resched # || / _---=> hardirq/softirq # ||| / _--=> preempt-depth # |||| /_--=> lock-depth # |||||/ delay # cmd pid |||||| time | caller # \ / |||||| \ | / <idle>-0 2.N..3 5902255250us+: lock_acquire: read rcu_read_lock <idle>-0 2.N..3 5902255253us+: lock_release: rcu_read_lock <idle>-0 2dN..3 5902255257us+: lock_acquire: xtime_lock <idle>-0 2dN..4 5902255259us : lock_acquire: clocksource_lock <idle>-0 2dN..4 5902255261us+: lock_release: clocksource_lock 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, 9 insertions, 1 deletions
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
index be34a6aa7e4d..29a370a45582 100644
--- a/kernel/trace/trace_output.c
+++ b/kernel/trace/trace_output.c
@@ -465,6 +465,7 @@ lat_print_generic(struct trace_seq *s, struct trace_entry *entry, int cpu)
465{ 465{
466 int hardirq, softirq; 466 int hardirq, softirq;
467 char comm[TASK_COMM_LEN]; 467 char comm[TASK_COMM_LEN];
468 int ret;
468 469
469 trace_find_cmdline(entry->pid, comm); 470 trace_find_cmdline(entry->pid, comm);
470 hardirq = entry->flags & TRACE_FLAG_HARDIRQ; 471 hardirq = entry->flags & TRACE_FLAG_HARDIRQ;
@@ -481,9 +482,16 @@ lat_print_generic(struct trace_seq *s, struct trace_entry *entry, int cpu)
481 hardirq ? 'h' : softirq ? 's' : '.')) 482 hardirq ? 'h' : softirq ? 's' : '.'))
482 return 0; 483 return 0;
483 484
485 if (entry->lock_depth < 0)
486 ret = trace_seq_putc(s, '.');
487 else
488 ret = trace_seq_printf(s, "%d", entry->lock_depth);
489 if (!ret)
490 return 0;
491
484 if (entry->preempt_count) 492 if (entry->preempt_count)
485 return trace_seq_printf(s, "%x", entry->preempt_count); 493 return trace_seq_printf(s, "%x", entry->preempt_count);
486 return trace_seq_puts(s, "."); 494 return trace_seq_putc(s, '.');
487} 495}
488 496
489static unsigned long preempt_mark_thresh = 100; 497static unsigned long preempt_mark_thresh = 100;