tracing/function-graph-tracer: fix functions call traces imbalance
authorFrederic Weisbecker <fweisbec@gmail.com>
Mon, 23 Mar 2009 21:17:01 +0000 (22:17 +0100)
committerIngo Molnar <mingo@elte.hu>
Mon, 23 Mar 2009 22:25:32 +0000 (23:25 +0100)
commit1618536961d31f9b3f55767b22d4a897f4204c26
treef1396f4c869328dc5d6e677f6fdde571d2c6e4d7
parentc4cff064be678f1e8344d907499f2a81282edc19
tracing/function-graph-tracer: fix functions call traces imbalance

Impact: fix traces output

Sometimes one can observe an imbalance in the traces between function
calls and function return traces:

func1() {
    }
}

The curly brace inside func1() is the return of another function nested
inside func1. The return trace have been inserted in the buffer but not
the entry.
We are storing a return address on the function traces stack while we
haven't inserted its entry on the buffer, hence the imbalance on the
traces.

This is because the tracers doesn't check all failures that can happen
on buffer insertion.

This patch reports the tracing recursion failures and the ring buffer
failures. In such cases, we now restore the original return address for
the function, giving up its return trace.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
LKML-Reference: <1237843021-11695-1-git-send-email-fweisbec@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/trace/trace.c