@@ -42,11 +42,23 @@ static int
42
42
seed_unwind_frame_info (struct task_struct * tsk , struct pt_regs * regs ,
43
43
struct unwind_frame_info * frame_info )
44
44
{
45
- /*
46
- * synchronous unwinding (e.g. dump_stack)
47
- * - uses current values of SP and friends
48
- */
49
- if (regs == NULL && (tsk == NULL || tsk == current )) {
45
+ if (regs ) {
46
+ /*
47
+ * Asynchronous unwinding of intr/exception
48
+ * - Just uses the pt_regs passed
49
+ */
50
+ frame_info -> task = tsk ;
51
+
52
+ frame_info -> regs .r27 = regs -> fp ;
53
+ frame_info -> regs .r28 = regs -> sp ;
54
+ frame_info -> regs .r31 = regs -> blink ;
55
+ frame_info -> regs .r63 = regs -> ret ;
56
+ frame_info -> call_frame = 0 ;
57
+ } else if (tsk == NULL || tsk == current ) {
58
+ /*
59
+ * synchronous unwinding (e.g. dump_stack)
60
+ * - uses current values of SP and friends
61
+ */
50
62
unsigned long fp , sp , blink , ret ;
51
63
frame_info -> task = current ;
52
64
@@ -63,7 +75,7 @@ seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs,
63
75
frame_info -> regs .r31 = blink ;
64
76
frame_info -> regs .r63 = ret ;
65
77
frame_info -> call_frame = 0 ;
66
- } else if ( regs == NULL ) {
78
+ } else {
67
79
/*
68
80
* Asynchronous unwinding of a likely sleeping task
69
81
* - first ensure it is actually sleeping
@@ -94,20 +106,7 @@ seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs,
94
106
frame_info -> regs .r28 += 60 ;
95
107
frame_info -> call_frame = 0 ;
96
108
97
- } else {
98
- /*
99
- * Asynchronous unwinding of intr/exception
100
- * - Just uses the pt_regs passed
101
- */
102
- frame_info -> task = tsk ;
103
-
104
- frame_info -> regs .r27 = regs -> fp ;
105
- frame_info -> regs .r28 = regs -> sp ;
106
- frame_info -> regs .r31 = regs -> blink ;
107
- frame_info -> regs .r63 = regs -> ret ;
108
- frame_info -> call_frame = 0 ;
109
109
}
110
-
111
110
return 0 ;
112
111
}
113
112
0 commit comments