diff options
Diffstat (limited to 'arch/nds32/kernel/stacktrace.c')
| -rw-r--r-- | arch/nds32/kernel/stacktrace.c | 6 | 
1 files changed, 5 insertions, 1 deletions
| diff --git a/arch/nds32/kernel/stacktrace.c b/arch/nds32/kernel/stacktrace.c index 8b231e910ea6..d974c0c1c65f 100644 --- a/arch/nds32/kernel/stacktrace.c +++ b/arch/nds32/kernel/stacktrace.c @@ -4,6 +4,7 @@  #include <linux/sched/debug.h>  #include <linux/sched/task_stack.h>  #include <linux/stacktrace.h> +#include <linux/ftrace.h>  void save_stack_trace(struct stack_trace *trace)  { @@ -16,6 +17,7 @@ void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)  	unsigned long *fpn;  	int skip = trace->skip;  	int savesched; +	int graph_idx = 0;  	if (tsk == current) {  		__asm__ __volatile__("\tori\t%0, $fp, #0\n":"=r"(fpn)); @@ -29,10 +31,12 @@ void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)  	       && (fpn >= (unsigned long *)TASK_SIZE)) {  		unsigned long lpp, fpp; -		lpp = fpn[-1]; +		lpp = fpn[LP_OFFSET];  		fpp = fpn[FP_OFFSET];  		if (!__kernel_text_address(lpp))  			break; +		else +			lpp = ftrace_graph_ret_addr(tsk, &graph_idx, lpp, NULL);  		if (savesched || !in_sched_functions(lpp)) {  			if (skip) { |