diff options
author | Huacai Chen <chenhuacai@loongson.cn> | 2025-01-25 13:51:42 +0300 |
---|---|---|
committer | Huacai Chen <chenhuacai@loongson.cn> | 2025-01-25 13:51:42 +0300 |
commit | 5d0cc7e585432b64a18aefab8876a8c433394560 (patch) | |
tree | 65179bd61143a738f483a2834e51dcdeae6cf96a | |
parent | 0816b2ea18284e2598faec024a4df6a93591bd17 (diff) | |
download | linux-5d0cc7e585432b64a18aefab8876a8c433394560.tar.xz |
LoongArch: Refactor bug_handler() implementation
1. Early return for user mode triggered exception with all types.
2. Give a chance to call fixup_exception() for default types (like
S390).
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
-rw-r--r-- | arch/loongarch/kernel/traps.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/arch/loongarch/kernel/traps.c b/arch/loongarch/kernel/traps.c index c57b4134f3e8..2ec3106c0da3 100644 --- a/arch/loongarch/kernel/traps.c +++ b/arch/loongarch/kernel/traps.c @@ -597,17 +597,24 @@ int is_valid_bugaddr(unsigned long addr) static void bug_handler(struct pt_regs *regs) { + if (user_mode(regs)) { + force_sig(SIGTRAP); + return; + } + switch (report_bug(regs->csr_era, regs)) { case BUG_TRAP_TYPE_BUG: - case BUG_TRAP_TYPE_NONE: - die_if_kernel("Oops - BUG", regs); - force_sig(SIGTRAP); + die("Oops - BUG", regs); break; case BUG_TRAP_TYPE_WARN: /* Skip the BUG instruction and continue */ regs->csr_era += LOONGARCH_INSN_SIZE; break; + + default: + if (!fixup_exception(regs)) + die("Oops - BUG", regs); } } |