Skip to content

Commit

Permalink
tracing: convert ftrace_dump spinlocks to raw
Browse files Browse the repository at this point in the history
ftrace_dump is used for printing out the contents of the ftrace ring buffer
to the console on failure. Currently it uses a spinlock to synchronize
the output from multiple failures on different CPUs. This spin lock
currently is a normal spinlock and can cause issues with lockdep and
lock tracing.

This patch converts it to raw since it is for error handling only.
The lock is local to the ftrace_dump and is not used by any other
infrastructure.

[ Impact: prevent ftrace_dump from locking up by internal tracing ]

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
  • Loading branch information
Steven Rostedt authored and Steven Rostedt committed Apr 28, 2009
1 parent 701970b commit cd891ae
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions kernel/trace/trace.c
Original file line number Diff line number Diff line change
Expand Up @@ -4114,7 +4114,8 @@ trace_printk_seq(struct trace_seq *s)

static void __ftrace_dump(bool disable_tracing)
{
static DEFINE_SPINLOCK(ftrace_dump_lock);
static raw_spinlock_t ftrace_dump_lock =
(raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED;
/* use static because iter can be a bit big for the stack */
static struct trace_iterator iter;
unsigned int old_userobj;
Expand All @@ -4123,7 +4124,8 @@ static void __ftrace_dump(bool disable_tracing)
int cnt = 0, cpu;

/* only one dump */
spin_lock_irqsave(&ftrace_dump_lock, flags);
local_irq_save(flags);
__raw_spin_lock(&ftrace_dump_lock);
if (dump_ran)
goto out;

Expand Down Expand Up @@ -4195,7 +4197,8 @@ static void __ftrace_dump(bool disable_tracing)
}

out:
spin_unlock_irqrestore(&ftrace_dump_lock, flags);
__raw_spin_unlock(&ftrace_dump_lock);
local_irq_restore(flags);
}

/* By default: disable tracing after the dump */
Expand Down

0 comments on commit cd891ae

Please sign in to comment.