Skip to content

Commit

Permalink
LoongArch: Set unwind stack type to unknown rather than set error flag
Browse files Browse the repository at this point in the history
During unwinding, unwind_done() is used as an end condition. Normally it
unwind to the user stack and then set the stack type to unknown, which
is a normal exit. When something unexpected happens in unwind process
and we cannot unwind anymore, we should set the error flag, and also set
the stack type to unknown to indicate that the unwind process can not
continue. The error flag emphasizes that the unwind process produce an
unexpected error. There is no unexpected things when we unwind the PT_REGS
in the top of IRQ stack and find out that is an user mode PT_REGS. Thus,
we should not set error flag and just set stack type to unknown.

Reported-by: Hengqi Chen <hengqi.chen@gmail.com>
Acked-by: Hengqi Chen <hengqi.chen@gmail.com>
Signed-off-by: Jinyang He <hejinyang@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
  • Loading branch information
MQ-mengqing authored and chenhuacai committed Dec 9, 2023
1 parent 8146c5b commit 97ceddb
Show file tree
Hide file tree
Showing 3 changed files with 2 additions and 3 deletions.
2 changes: 1 addition & 1 deletion arch/loongarch/kernel/stacktrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ void arch_stack_walk(stack_trace_consume_fn consume_entry, void *cookie,
}

for (unwind_start(&state, task, regs);
!unwind_done(&state) && !unwind_error(&state); unwind_next_frame(&state)) {
!unwind_done(&state); unwind_next_frame(&state)) {
addr = unwind_get_return_address(&state);
if (!addr || !consume_entry(cookie, addr))
break;
Expand Down
1 change: 0 additions & 1 deletion arch/loongarch/kernel/unwind.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,5 @@ bool default_next_frame(struct unwind_state *state)

} while (!get_stack_info(state->sp, state->task, info));

state->error = true;
return false;
}
2 changes: 1 addition & 1 deletion arch/loongarch/kernel/unwind_prologue.c
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ static bool next_frame(struct unwind_state *state)
} while (!get_stack_info(state->sp, state->task, info));

out:
state->error = true;
state->stack_info.type = STACK_TYPE_UNKNOWN;
return false;
}

Expand Down

0 comments on commit 97ceddb

Please sign in to comment.