From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Mon, 1 Feb 2016 10:00:11 +0100 From: Heiko Carstens Subject: Re: [PATCH] s390:ftrace: add save_stack_trace_regs() Message-ID: <20160201090011.GA4166@osiris> References: <86d380d172bba0416aef64448b0e1b6a50fad326.1454044645.git.panand@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <86d380d172bba0416aef64448b0e1b6a50fad326.1454044645.git.panand@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-Archive: List-Post: To: Pratyush Anand Cc: schwidefsky@de.ibm.com, rostedt@goodmis.org, linux-s390@vger.kernel.org, Chunyu Hu , open list List-ID: On Fri, Jan 29, 2016 at 10:50:28AM +0530, Pratyush Anand wrote: > Implement save_stack_trace_regs, so that stacktrace of a kprobe events can > be obtained. > > Without this we see following warning: > "save_stack_trace_regs() not implemented yet." > when we execute: > 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 > > Reported-by: Chunyu Hu > Signed-off-by: Pratyush Anand > --- > arch/s390/kernel/stacktrace.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/arch/s390/kernel/stacktrace.c b/arch/s390/kernel/stacktrace.c > index 1785cd82253c..586da400f931 100644 > --- a/arch/s390/kernel/stacktrace.c > +++ b/arch/s390/kernel/stacktrace.c > @@ -94,3 +94,16 @@ void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace) > trace->entries[trace->nr_entries++] = ULONG_MAX; > } > EXPORT_SYMBOL_GPL(save_stack_trace_tsk); > + > +void save_stack_trace_regs(struct pt_regs *regs, struct stack_trace *trace) > +{ > + unsigned long sp, low, high; > + > + sp = kernel_stack_pointer(regs); > + low = (unsigned long) task_stack_page(current); > + high = (unsigned long) task_pt_regs(current); > + save_context_stack(trace, sp, low, high, 0); > + if (trace->nr_entries < trace->max_entries) > + trace->entries[trace->nr_entries++] = ULONG_MAX; > +} > +EXPORT_SYMBOL_GPL(save_stack_trace_regs); While playing around with this, I discovered a couple of bugs in our stacktrace code. However this patch is also not correct, since it will save a stacktrace only if being called in process context, but not for interrupt context. I will fix this within this patch.