perf: Introduce new perf_fetch_caller_regs() for hot regs snapshot
authorFrederic Weisbecker <fweisbec@gmail.com>
Thu, 4 Mar 2010 20:15:56 +0000 (21:15 +0100)
committerFrederic Weisbecker <fweisbec@gmail.com>
Wed, 10 Mar 2010 13:39:35 +0000 (14:39 +0100)
commit5331d7b84613b8325362dde53dc2bff2fb87d351
tree60f4bf4fdaf31b612eefc291bf6b558dc4c8d947
parent61e67fb9d3ed13e6a7f58652ae4979b9c872fa57
perf: Introduce new perf_fetch_caller_regs() for hot regs snapshot

Events that trigger overflows by interrupting a context can
use get_irq_regs() or task_pt_regs() to retrieve the state
when the event triggered. But this is not the case for some
other class of events like trace events as tracepoints are
executed in the same context than the code that triggered
the event.

It means we need a different api to capture the regs there,
namely we need a hot snapshot to get the most important
informations for perf: the instruction pointer to get the
event origin, the frame pointer for the callchain, the code
segment for user_mode() tests (we always use __KERNEL_CS as
trace events always occur from the kernel) and the eflags
for further purposes.

v2: rename perf_save_regs to perf_fetch_caller_regs as per
Masami's suggestion.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Jason Baron <jbaron@redhat.com>
Cc: Archs <linux-arch@vger.kernel.org>
arch/x86/kernel/cpu/perf_event.c
arch/x86/kernel/dumpstack.h
include/linux/perf_event.h
kernel/perf_event.c