diff options
author | Frederic Weisbecker <fweisbec@gmail.com> | 2009-04-19 17:38:12 -0400 |
---|---|---|
committer | Frederic Weisbecker <fweisbec@gmail.com> | 2009-04-19 17:38:12 -0400 |
commit | e057a5e5647a1c9d0d0054fbd298bfa04b3d1cb4 (patch) | |
tree | 4495ffacfb31ff535c9e6fde5ea03f62dd3c3b53 /kernel | |
parent | 8e668b5b3455207e4540fc7ccab9ecf70142f288 (diff) |
tracing/core: Add current context on tracing recursion warning
In case of tracing recursion detection, we only get the stacktrace.
But the current context may be very useful to debug the issue.
This patch adds the softirq/hardirq/nmi context with the warning
using lockdep context display to have a familiar output.
v2: Use printk_once()
v3: drop {hardirq,softirq}_context which depend on lockdep,
only keep what is part of current->trace_recursion,
sufficient to debug the warning source.
[ Impact: print context necessary to debug recursion ]
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/trace/ring_buffer.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index b421b0ea9112..bffde630c4e2 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c | |||
@@ -1495,6 +1495,13 @@ static int trace_recursive_lock(void) | |||
1495 | if (unlikely(current->trace_recursion & (1 << level))) { | 1495 | if (unlikely(current->trace_recursion & (1 << level))) { |
1496 | /* Disable all tracing before we do anything else */ | 1496 | /* Disable all tracing before we do anything else */ |
1497 | tracing_off_permanent(); | 1497 | tracing_off_permanent(); |
1498 | |||
1499 | printk_once(KERN_WARNING "Tracing recursion: " | ||
1500 | "HC[%lu]:SC[%lu]:NMI[%lu]\n", | ||
1501 | hardirq_count() >> HARDIRQ_SHIFT, | ||
1502 | softirq_count() >> SOFTIRQ_SHIFT, | ||
1503 | in_nmi()); | ||
1504 | |||
1498 | WARN_ON_ONCE(1); | 1505 | WARN_ON_ONCE(1); |
1499 | return -1; | 1506 | return -1; |
1500 | } | 1507 | } |