ARC: stack unwinding: reorganize how initial register state setup
authorVineet Gupta <vgupta@synopsys.com>
Sat, 7 Nov 2020 01:37:34 +0000 (17:37 -0800)
committerVineet Gupta <vgupta@synopsys.com>
Wed, 18 Nov 2020 04:12:01 +0000 (20:12 -0800)
This is a non-functional change, if anything a better fall-back
handling.

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
arch/arc/kernel/stacktrace.c

index b2557f5..f73da20 100644 (file)
@@ -42,11 +42,23 @@ static int
 seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs,
                       struct unwind_frame_info *frame_info)
 {
-       /*
-        * synchronous unwinding (e.g. dump_stack)
-        *  - uses current values of SP and friends
-        */
-       if (regs == NULL && (tsk == NULL || tsk == current)) {
+       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
+                */
                unsigned long fp, sp, blink, ret;
                frame_info->task = current;
 
@@ -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
@@ -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;
 }