[PATCH 2/2] tracing/events/lockdep: move tracepoints within recursive protection

From: Steven Rostedt
Date: Thu Apr 16 2009 - 12:19:00 EST


From: Steven Rostedt <srostedt@xxxxxxxxxx>

With the current location of the tracepoints in lockdep, the system
can hard lockup in minutes when the tracepoints are enabled.

Moving the tracepoints outside inside the lockdep protection solves
the issue.

Cc: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx>
Signed-off-by: Steven Rostedt <rostedt@xxxxxxxxxxx>
---
kernel/lockdep.c | 14 +++++++-------
1 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/kernel/lockdep.c b/kernel/lockdep.c
index 47b201e..53b887a 100644
--- a/kernel/lockdep.c
+++ b/kernel/lockdep.c
@@ -2941,11 +2941,11 @@ void lock_acquire(struct lockdep_map *lock, unsigned int subclass,
{
unsigned long flags;

- trace_lock_acquire(lock, subclass, trylock, read, check, nest_lock, ip);
-
if (unlikely(current->lockdep_recursion))
return;

+ trace_lock_acquire(lock, subclass, trylock, read, check, nest_lock, ip);
+
raw_local_irq_save(flags);
check_flags(flags);

@@ -2962,11 +2962,11 @@ void lock_release(struct lockdep_map *lock, int nested,
{
unsigned long flags;

- trace_lock_release(lock, nested, ip);
-
if (unlikely(current->lockdep_recursion))
return;

+ trace_lock_release(lock, nested, ip);
+
raw_local_irq_save(flags);
check_flags(flags);
current->lockdep_recursion = 1;
@@ -3118,14 +3118,14 @@ void lock_contended(struct lockdep_map *lock, unsigned long ip)
{
unsigned long flags;

+ if (unlikely(current->lockdep_recursion))
+ return;
+
trace_lock_contended(lock, ip);

if (unlikely(!lock_stat))
return;

- if (unlikely(current->lockdep_recursion))
- return;
-
raw_local_irq_save(flags);
check_flags(flags);
current->lockdep_recursion = 1;
--
1.6.2.1

--
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/