Message ID | 20191017173743.5430-3-hch@lst.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [01/15] riscv: cleanup <asm/bug.h> | expand |
On Thu, Oct 17, 2019 at 11:07 PM Christoph Hellwig <hch@lst.de> wrote: > > If we always compile the get_break_insn_length inline function we can > remove the ifdefs and let dead code elimination take care of the warn > branch that is now unreadable because the report_bug stub always > returns BUG_TRAP_TYPE_BUG. > > Signed-off-by: Christoph Hellwig <hch@lst.de> > --- > arch/riscv/kernel/traps.c | 26 ++++++-------------------- > 1 file changed, 6 insertions(+), 20 deletions(-) > > diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c > index 1ac75f7d0bff..10a17e545f43 100644 > --- a/arch/riscv/kernel/traps.c > +++ b/arch/riscv/kernel/traps.c > @@ -111,7 +111,6 @@ DO_ERROR_INFO(do_trap_ecall_s, > DO_ERROR_INFO(do_trap_ecall_m, > SIGILL, ILL_ILLTRP, "environment call from M-mode"); > > -#ifdef CONFIG_GENERIC_BUG > static inline unsigned long get_break_insn_length(unsigned long pc) > { > bug_insn_t insn; > @@ -120,28 +119,15 @@ static inline unsigned long get_break_insn_length(unsigned long pc) > return 0; > return (((insn & __INSN_LENGTH_MASK) == __INSN_LENGTH_32) ? 4UL : 2UL); > } > -#endif /* CONFIG_GENERIC_BUG */ > > asmlinkage void do_trap_break(struct pt_regs *regs) > { > - if (user_mode(regs)) { > - force_sig_fault(SIGTRAP, TRAP_BRKPT, > - (void __user *)(regs->sepc)); > - return; > - } > -#ifdef CONFIG_GENERIC_BUG > - { > - enum bug_trap_type type; > - > - type = report_bug(regs->sepc, regs); > - if (type == BUG_TRAP_TYPE_WARN) { > - regs->sepc += get_break_insn_length(regs->sepc); > - return; > - } > - } > -#endif /* CONFIG_GENERIC_BUG */ > - > - die(regs, "Kernel BUG"); > + if (user_mode(regs)) > + force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)regs->sepc); > + else if (report_bug(regs->sepc, regs) == BUG_TRAP_TYPE_WARN) > + regs->sepc += get_break_insn_length(regs->sepc); > + else > + die(regs, "Kernel BUG"); > } > > #ifdef CONFIG_GENERIC_BUG > -- > 2.20.1 > > > _______________________________________________ > linux-riscv mailing list > linux-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-riscv LGTM. Reviewed-by: Anup Patel <anup@brainfault.org> Regards, Anup
On Thu, 17 Oct 2019, Christoph Hellwig wrote: > If we always compile the get_break_insn_length inline function we can > remove the ifdefs and let dead code elimination take care of the warn > branch that is now unreadable because the report_bug stub always > returns BUG_TRAP_TYPE_BUG. > > Signed-off-by: Christoph Hellwig <hch@lst.de> Thanks, queued for v5.4-rc. - Paul
diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c index 1ac75f7d0bff..10a17e545f43 100644 --- a/arch/riscv/kernel/traps.c +++ b/arch/riscv/kernel/traps.c @@ -111,7 +111,6 @@ DO_ERROR_INFO(do_trap_ecall_s, DO_ERROR_INFO(do_trap_ecall_m, SIGILL, ILL_ILLTRP, "environment call from M-mode"); -#ifdef CONFIG_GENERIC_BUG static inline unsigned long get_break_insn_length(unsigned long pc) { bug_insn_t insn; @@ -120,28 +119,15 @@ static inline unsigned long get_break_insn_length(unsigned long pc) return 0; return (((insn & __INSN_LENGTH_MASK) == __INSN_LENGTH_32) ? 4UL : 2UL); } -#endif /* CONFIG_GENERIC_BUG */ asmlinkage void do_trap_break(struct pt_regs *regs) { - if (user_mode(regs)) { - force_sig_fault(SIGTRAP, TRAP_BRKPT, - (void __user *)(regs->sepc)); - return; - } -#ifdef CONFIG_GENERIC_BUG - { - enum bug_trap_type type; - - type = report_bug(regs->sepc, regs); - if (type == BUG_TRAP_TYPE_WARN) { - regs->sepc += get_break_insn_length(regs->sepc); - return; - } - } -#endif /* CONFIG_GENERIC_BUG */ - - die(regs, "Kernel BUG"); + if (user_mode(regs)) + force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)regs->sepc); + else if (report_bug(regs->sepc, regs) == BUG_TRAP_TYPE_WARN) + regs->sepc += get_break_insn_length(regs->sepc); + else + die(regs, "Kernel BUG"); } #ifdef CONFIG_GENERIC_BUG
If we always compile the get_break_insn_length inline function we can remove the ifdefs and let dead code elimination take care of the warn branch that is now unreadable because the report_bug stub always returns BUG_TRAP_TYPE_BUG. Signed-off-by: Christoph Hellwig <hch@lst.de> --- arch/riscv/kernel/traps.c | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-)