tracing/function-return-tracer: store return stack into task_struct and allocate...
authorFrederic Weisbecker <fweisbec@gmail.com>
Sun, 23 Nov 2008 05:22:56 +0000 (06:22 +0100)
committerIngo Molnar <mingo@elte.hu>
Sun, 23 Nov 2008 08:17:26 +0000 (09:17 +0100)
commitf201ae2356c74bcae130b2177b3dca903ea98071
treec4b1b43fbe0a4594cb86749b2e7098fe15eb86ba
parenta0a70c735ef714fe1b6777b571630c3d50c7b008
tracing/function-return-tracer: store return stack into task_struct and allocate it dynamically

Impact: use deeper function tracing depth safely

Some tests showed that function return tracing needed a more deeper depth
of function calls. But it could be unsafe to store these return addresses
to the stack.

So these arrays will now be allocated dynamically into task_struct of current
only when the tracer is activated.

Typical scheme when tracer is activated:
- allocate a return stack for each task in global list.
- fork: allocate the return stack for the newly created task
- exit: free return stack of current
- idle init: same as fork

I chose a default depth of 50. I don't have overruns anymore.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/include/asm/ftrace.h
arch/x86/include/asm/thread_info.h
arch/x86/kernel/ftrace.c
include/linux/ftrace.h
include/linux/sched.h
kernel/exit.c
kernel/fork.c
kernel/sched.c
kernel/trace/ftrace.c