Messages in this thread Patch in this message | | | Subject | Re: [PATCH 0/1] x86: Eliminate bp argument from the stack tracing routines | From | Soeren Sandmann <> | Date | 08 Nov 2010 12:38:22 +0100 |
| |
Frederic Weisbecker <fweisbec@gmail.com> writes:
> > (FWIW, this > > > > diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c > > index 461a85d..d977d26 100644 > > --- a/arch/x86/kernel/cpu/perf_event.c > > +++ b/arch/x86/kernel/cpu/perf_event.c > > @@ -1653,7 +1653,7 @@ static const struct stacktrace_ops backtrace_ops = { > > .warning_symbol = backtrace_warning_symbol, > > .stack = backtrace_stack, > > .address = backtrace_address, > > - .walk_stack = print_context_stack_bp, > > + .walk_stack = print_context_stack, > > }; > > > > makes it produce correct kernel callchains. And yes, I did compile the > > kernel with CONFIG_FRAME_POINTER). > > > > What do you see is broken in 64 bits perf callchains? Can you please provide > me more details so that I can fix the issue?
Apparently, the problem only happens when using the hrtimer based events. I don't think there is a way to make perf use those from the command line, but if you apply this:
--- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -294,6 +294,12 @@ static void create_counter(int counter, int cpu) attr->enable_on_exec = 1; } + if (attr->config == PERF_COUNT_HW_CPU_CYCLES && attr->type == PERF_TYPE_HARDWARE) + { + attr->type = PERF_TYPE_SOFTWARE; + attr->config = PERF_COUNT_SW_CPU_CLOCK; + } + for (thread_index = 0; thread_index < thread_num; thread_index++) { try_again: fd[nr_cpu][counter][thread_index] = sys_perf_event_open(attr, you should be able to see the problem. You can also try sysprof; it always uses the software counters.
Soren
| |