diff options
| author | Takashi Iwai <tiwai@suse.de> | 2015-03-09 08:42:00 +0100 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2015-03-09 08:42:00 +0100 |
| commit | 4aa01c408b7022c620241b373d4c3707a2ebeab6 (patch) | |
| tree | 25df2a7453ec3bf7fc82f2871756b4efd6d3d283 /arch/arc/kernel/stacktrace.c | |
| parent | 5371fc0ecdf55b6811ade8a198de8ace2f4e5861 (diff) | |
| parent | a1f3f1ca66bd12c339b17a0c2ef93a093f90a277 (diff) | |
Merge branch 'for-linus' into for-next
Merging the HD-audio fixes back to base devel branch for further
working on it.
Diffstat (limited to 'arch/arc/kernel/stacktrace.c')
| -rw-r--r-- | arch/arc/kernel/stacktrace.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/arch/arc/kernel/stacktrace.c b/arch/arc/kernel/stacktrace.c index 9ce47cfe2303..92320d6f737c 100644 --- a/arch/arc/kernel/stacktrace.c +++ b/arch/arc/kernel/stacktrace.c @@ -43,6 +43,10 @@ static void 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 (tsk == NULL && regs == NULL) { unsigned long fp, sp, blink, ret; frame_info->task = current; @@ -61,12 +65,17 @@ static void seed_unwind_frame_info(struct task_struct *tsk, frame_info->regs.r63 = ret; frame_info->call_frame = 0; } else if (regs == NULL) { + /* + * Asynchronous unwinding of sleeping task + * - Gets SP etc from task's pt_regs (saved bottom of kernel + * mode stack of task) + */ frame_info->task = tsk; - frame_info->regs.r27 = KSTK_FP(tsk); - frame_info->regs.r28 = KSTK_ESP(tsk); - frame_info->regs.r31 = KSTK_BLINK(tsk); + frame_info->regs.r27 = TSK_K_FP(tsk); + frame_info->regs.r28 = TSK_K_ESP(tsk); + frame_info->regs.r31 = TSK_K_BLINK(tsk); frame_info->regs.r63 = (unsigned int)__switch_to; /* In the prologue of __switch_to, first FP is saved on stack @@ -83,6 +92,10 @@ static void seed_unwind_frame_info(struct task_struct *tsk, 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; @@ -95,7 +108,7 @@ static void seed_unwind_frame_info(struct task_struct *tsk, #endif -static noinline unsigned int +notrace noinline unsigned int arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs, int (*consumer_fn) (unsigned int, void *), void *arg) { |
