perf/x86-64: Use frame pointer to walk on irq and process stacks
We were using the frame pointer based stack walker on every contexts in x86-32, but not in x86-64 where we only use the seven-league boots on the exception stacks. Use it also on irq and process stacks. This utterly accelerate the captures. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
@ -208,7 +208,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
|
|||||||
if (in_irq_stack(stack, irq_stack, irq_stack_end)) {
|
if (in_irq_stack(stack, irq_stack, irq_stack_end)) {
|
||||||
if (ops->stack(data, "IRQ") < 0)
|
if (ops->stack(data, "IRQ") < 0)
|
||||||
break;
|
break;
|
||||||
bp = print_context_stack(tinfo, stack, bp,
|
bp = ops->walk_stack(tinfo, stack, bp,
|
||||||
ops, data, irq_stack_end, &graph);
|
ops, data, irq_stack_end, &graph);
|
||||||
/*
|
/*
|
||||||
* We link to the next stack (which would be
|
* We link to the next stack (which would be
|
||||||
@ -229,7 +229,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
|
|||||||
/*
|
/*
|
||||||
* This handles the process stack:
|
* This handles the process stack:
|
||||||
*/
|
*/
|
||||||
bp = print_context_stack(tinfo, stack, bp, ops, data, NULL, &graph);
|
bp = ops->walk_stack(tinfo, stack, bp, ops, data, NULL, &graph);
|
||||||
put_cpu();
|
put_cpu();
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(dump_trace);
|
EXPORT_SYMBOL(dump_trace);
|
||||||
|
Reference in New Issue
Block a user