]> git.karo-electronics.de Git - karo-tx-linux.git/commit
tracing: Fix stacktrace of latency tracers (irqsoff and friends)
authorSteven Rostedt <srostedt@redhat.com>
Thu, 19 Apr 2012 14:31:47 +0000 (10:31 -0400)
committerBen Hutchings <ben@decadent.org.uk>
Fri, 11 May 2012 12:14:35 +0000 (13:14 +0100)
commitcce53871300df0290a1b4d1708f385c323d02c77
treeff2e24653116618f85bc51b910b466205bdee306
parent4e577871ae58c6f4d3b08d31883f876eed5d0fa3
tracing: Fix stacktrace of latency tracers (irqsoff and friends)

commit db4c75cbebd7e5910cd3bcb6790272fcc3042857 upstream.

While debugging a latency with someone on IRC (mirage335) on #linux-rt (OFTC),
we discovered that the stacktrace output of the latency tracers
(preemptirqsoff) was empty.

This bug was caused by the creation of the dynamic length stack trace
again (like commit 12b5da3 "tracing: Fix ent_size in trace output" was).

This bug is caused by the latency tracers requiring the next event
to determine the time between the current event and the next. But by
grabbing the next event, the iter->ent_size is set to the next event
instead of the current one. As the stacktrace event is the last event,
this makes the ent_size zero and causes nothing to be printed for
the stack trace. The dynamic stacktrace uses the ent_size to determine
how much of the stack can be printed. The ent_size of zero means
no stack.

The simple fix is to save the iter->ent_size before finding the next event.

Note, mirage335 asked to remain anonymous from LKML and git, so I will
not add the Reported-by and Tested-by tags, even though he did report
the issue and tested the fix.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
kernel/trace/trace_output.c