summaryrefslogtreecommitdiff
path: root/arch/arc/kernel/stacktrace.c
diff options
context:
space:
mode:
authorVineet Gupta <vgupta@synopsys.com>2015-04-10 14:06:40 +0530
committerVineet Gupta <vgupta@synopsys.com>2015-06-19 18:09:29 +0530
commitdef32fad84975d5d28e070215038224ea7f0d4bc (patch)
treec572269a428c47f4b5d7a54b4b1b29b0f55cee0a /arch/arc/kernel/stacktrace.c
parent082ae1e1570c69a06221701718f548bd4000b95b (diff)
ARC: stack unwinder to bail if PC is not kernel mode
Currently, it doesn't invoke the callback but continues to unwind Also while at it - simplify the code a bit Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Diffstat (limited to 'arch/arc/kernel/stacktrace.c')
-rw-r--r--arch/arc/kernel/stacktrace.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/arch/arc/kernel/stacktrace.c b/arch/arc/kernel/stacktrace.c
index 92320d6f737c..001de4ce711e 100644
--- a/arch/arc/kernel/stacktrace.c
+++ b/arch/arc/kernel/stacktrace.c
@@ -122,19 +122,17 @@ arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs,
while (1) {
address = UNW_PC(&frame_info);
- if (address && __kernel_text_address(address)) {
- if (consumer_fn(address, arg) == -1)
- break;
- }
+ if (!address || !__kernel_text_address(address))
+ break;
- ret = arc_unwind(&frame_info);
+ if (consumer_fn(address, arg) == -1)
+ break;
- if (ret == 0) {
- frame_info.regs.r63 = frame_info.regs.r31;
- continue;
- } else {
+ ret = arc_unwind(&frame_info);
+ if (ret)
break;
- }
+
+ frame_info.regs.r63 = frame_info.regs.r31;
}
return address; /* return the last address it saw */