[PATCH] arm64:ftrace: add save_stack_trace_regs()
Will Deacon
will.deacon at arm.com
Thu Sep 1 04:39:21 PDT 2016
On Thu, Sep 01, 2016 at 04:57:30PM +0530, Pratyush Anand wrote:
> On Fri, Jul 31, 2015 at 2:51 PM, Pratyush Anand <panand at redhat.com> wrote:
> > Implement save_stack_trace_regs, so that stacktrace of a kprobe events can be
> > obtained.
> >
> > Signed-off-by: Pratyush Anand <panand at redhat.com>
> > ---
> > Function will be useful only after having ARM64 kprobes upstreamed.
> > However, since there is no dependency in applying the patch, so it may be
> > upstreamed independently (if there is no other review comment).
>
>
> Since kprobe is already in mainline now. So any comment for this patch?
> It still applies cleanly to the latest upstream.
It would be nice if David or Akashi could review/test it.
Will
> > I see following stack trace for kfree with this patch in one of the case.
> >
> > echo stacktrace > /sys/kernel/debug/tracing/trace_options
> > echo "p kfree" >> /sys/kernel/debug/tracing/kprobe_events
> > echo 1 > /sys/kernel/debug/tracing/events/kprobes/enable
> > more /sys/kernel/debug/tracing/trace
> > bash-3868 [001] d... 2863.068271: p_kfree_0: (kfree+0x0/0x194)
> > bash-3868 [001] d... 2863.068276: <stack trace>
> > => kfree
> > => syscall_trace_exit
> > => __sys_trace_return_skipped
> >
> > arch/arm64/kernel/stacktrace.c | 18 ++++++++++++++++++
> > 1 file changed, 18 insertions(+)
> >
> > diff --git a/arch/arm64/kernel/stacktrace.c b/arch/arm64/kernel/stacktrace.c
> > index 407991bf79f5..c7fa0431ef3e 100644
> > --- a/arch/arm64/kernel/stacktrace.c
> > +++ b/arch/arm64/kernel/stacktrace.c
> > @@ -97,6 +97,24 @@ static int save_trace(struct stackframe *frame, void *d)
> > return trace->nr_entries >= trace->max_entries;
> > }
> >
> > +void save_stack_trace_regs(struct pt_regs *regs, struct stack_trace *trace)
> > +{
> > + struct stack_trace_data data;
> > + struct stackframe frame;
> > +
> > + data.trace = trace;
> > + data.skip = trace->skip;
> > + data.no_sched_functions = 0;
> > +
> > + frame.fp = regs->regs[29];
> > + frame.sp = regs->sp;
> > + frame.pc = regs->pc;
> > +
> > + walk_stackframe(&frame, save_trace, &data);
> > + if (trace->nr_entries < trace->max_entries)
> > + trace->entries[trace->nr_entries++] = ULONG_MAX;
> > +}
> > +
> > void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
> > {
> > struct stack_trace_data data;
> > --
> > 2.4.3
> >
> >
> > _______________________________________________
> > linux-arm-kernel mailing list
> > linux-arm-kernel at lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
More information about the linux-arm-kernel
mailing list