struct stackframe {
        unsigned long fp;
-       unsigned long sp;
        unsigned long pc;
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
        unsigned int graph;
 
        }
 
        frame.fp = regs->regs[29];
-       frame.sp = regs->sp;
        frame.pc = regs->pc;
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
        frame.graph = current->curr_ret_stack;
 
                return 0;
 
        frame.fp = thread_saved_fp(p);
-       frame.sp = thread_saved_sp(p);
        frame.pc = thread_saved_pc(p);
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
        frame.graph = p->curr_ret_stack;
 #endif
        do {
-               if (frame.sp < stack_page ||
-                   frame.sp >= stack_page + THREAD_SIZE ||
-                   unwind_frame(p, &frame))
+               if (unwind_frame(p, &frame))
                        goto out;
                if (!in_sched_functions(frame.pc)) {
                        ret = frame.pc;
 
        data.addr = NULL;
 
        frame.fp = (unsigned long)__builtin_frame_address(0);
-       frame.sp = current_stack_pointer;
        frame.pc = (unsigned long)return_address; /* dummy */
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
        frame.graph = current->curr_ret_stack;
 
            !on_task_stack(tsk, fp))
                return -EINVAL;
 
-       frame->sp = fp + 0x10;
        frame->fp = READ_ONCE_NOCHECK(*(unsigned long *)(fp));
        frame->pc = READ_ONCE_NOCHECK(*(unsigned long *)(fp + 8));
 
        data.no_sched_functions = 0;
 
        frame.fp = regs->regs[29];
-       frame.sp = regs->sp;
        frame.pc = regs->pc;
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
        frame.graph = current->curr_ret_stack;
        if (tsk != current) {
                data.no_sched_functions = 1;
                frame.fp = thread_saved_fp(tsk);
-               frame.sp = thread_saved_sp(tsk);
                frame.pc = thread_saved_pc(tsk);
        } else {
                data.no_sched_functions = 0;
                frame.fp = (unsigned long)__builtin_frame_address(0);
-               frame.sp = current_stack_pointer;
                frame.pc = (unsigned long)save_stack_trace_tsk;
        }
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
 
                return regs->pc;
 
        frame.fp = regs->regs[29];
-       frame.sp = regs->sp;
        frame.pc = regs->pc;
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
        frame.graph = -1; /* no task info */
 
 
        if (tsk == current) {
                frame.fp = (unsigned long)__builtin_frame_address(0);
-               frame.sp = current_stack_pointer;
                frame.pc = (unsigned long)dump_backtrace;
        } else {
                /*
                 * task blocked in __switch_to
                 */
                frame.fp = thread_saved_fp(tsk);
-               frame.sp = thread_saved_sp(tsk);
                frame.pc = thread_saved_pc(tsk);
        }
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER