Loading arch/arc/kernel/stacktrace.c +18 −19 Original line number Diff line number Diff line Loading @@ -42,11 +42,23 @@ static int seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs, struct unwind_frame_info *frame_info) { if (regs) { /* * Asynchronous unwinding of intr/exception * - Just uses the pt_regs passed */ frame_info->task = tsk; frame_info->regs.r27 = regs->fp; frame_info->regs.r28 = regs->sp; frame_info->regs.r31 = regs->blink; frame_info->regs.r63 = regs->ret; frame_info->call_frame = 0; } else if (tsk == NULL || tsk == current) { /* * synchronous unwinding (e.g. dump_stack) * - uses current values of SP and friends */ if (regs == NULL && (tsk == NULL || tsk == current)) { unsigned long fp, sp, blink, ret; frame_info->task = current; Loading @@ -63,7 +75,7 @@ seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs, frame_info->regs.r31 = blink; frame_info->regs.r63 = ret; frame_info->call_frame = 0; } else if (regs == NULL) { } else { /* * Asynchronous unwinding of a likely sleeping task * - first ensure it is actually sleeping Loading Loading @@ -94,20 +106,7 @@ seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs, frame_info->regs.r28 += 60; frame_info->call_frame = 0; } else { /* * Asynchronous unwinding of intr/exception * - Just uses the pt_regs passed */ frame_info->task = tsk; frame_info->regs.r27 = regs->fp; frame_info->regs.r28 = regs->sp; frame_info->regs.r31 = regs->blink; frame_info->regs.r63 = regs->ret; frame_info->call_frame = 0; } return 0; } Loading Loading
arch/arc/kernel/stacktrace.c +18 −19 Original line number Diff line number Diff line Loading @@ -42,11 +42,23 @@ static int seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs, struct unwind_frame_info *frame_info) { if (regs) { /* * Asynchronous unwinding of intr/exception * - Just uses the pt_regs passed */ frame_info->task = tsk; frame_info->regs.r27 = regs->fp; frame_info->regs.r28 = regs->sp; frame_info->regs.r31 = regs->blink; frame_info->regs.r63 = regs->ret; frame_info->call_frame = 0; } else if (tsk == NULL || tsk == current) { /* * synchronous unwinding (e.g. dump_stack) * - uses current values of SP and friends */ if (regs == NULL && (tsk == NULL || tsk == current)) { unsigned long fp, sp, blink, ret; frame_info->task = current; Loading @@ -63,7 +75,7 @@ seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs, frame_info->regs.r31 = blink; frame_info->regs.r63 = ret; frame_info->call_frame = 0; } else if (regs == NULL) { } else { /* * Asynchronous unwinding of a likely sleeping task * - first ensure it is actually sleeping Loading Loading @@ -94,20 +106,7 @@ seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs, frame_info->regs.r28 += 60; frame_info->call_frame = 0; } else { /* * Asynchronous unwinding of intr/exception * - Just uses the pt_regs passed */ frame_info->task = tsk; frame_info->regs.r27 = regs->fp; frame_info->regs.r28 = regs->sp; frame_info->regs.r31 = regs->blink; frame_info->regs.r63 = regs->ret; frame_info->call_frame = 0; } return 0; } Loading