On Tue, 30 Mar 2021 18:33:16 +0900 Masami Hiramatsu <mhira...@kernel.org> wrote:
> Hi Jisheng, Hi Masami, > > On Tue, 30 Mar 2021 02:16:24 +0800 > Jisheng Zhang <jszha...@mail.ustc.edu.cn> wrote: > > > From: Jisheng Zhang <jszh...@kernel.org> > > > > Current riscv's kprobe handlers are run with both preemption and > > interrupt enabled, this violates kprobe requirements. Fix this issue > > by keeping interrupts disabled for BREAKPOINT exception. > > Not only while the breakpoint exception but also until the end of > the single step (maybe you are using __BUG_INSN_32 ??) need to be > disable interrupts. Can this do that? > interrupt is disabled during "single step" by kprobes_save_local_irqflag() and kprobes_restore_local_irqflag(). The code flow looks like: do_trap_break() // for bp kprobe_breakpoint_handler() setup_singlestep() kprobes_restore_local_irqflag() do_trap_break() // for ss kprobe_single_step_handler() kprobes_restore_local_irqflag() Thanks