Hi Mathieu, Steven, From: Steven Rostedt [mailto:[email protected]] > >On Tue, 17 Nov 2015 16:35:35 +0000 (UTC) >Mathieu Desnoyers <[email protected]> wrote: > >> Hi, >> >> I notice that trace_kprobe.c does local_save_flags() within >> __kprobe_trace_func(), which is called (at least on x86) with >> interrupts always disabled. This is then used as interrupt on/off >> state within the recorded event, which is misleading. > >Kinda. The kprobe itself has interrupts disabled, so it's only a white >lie. > >> >> I also don't understand why arch/x86/kernel/kprobes/ftrace.c >> pre handler disables interrupts, considering the following >> comment above arch/x86/kernel/kprobes/core.c: kprobe_int3_handler() >> >> * Interrupts are disabled on entry as trap3 is an interrupt gate and they >> * remain disabled throughout this function. > >I think you answered your own question. The key piece you may be >missing is that kprobe_ftrace_handler() is not called from a trap, but >from a function traced callback, which does not disable interrupts.
right, since the user can not forcibly change any kprobes to jump, those handlers should be ran under the same environment. >> A struct pt_regs is received by this function, but I don't see >> any way to get the state of irq enable/disable from struct pt_regs >> across architectures. >> >> Any thoughts on how to fix this ? > >Create a cross arch: flags = regs_irq_save(regs) function. > Good idea! Anyway, we can start on x86, in other arch we can prepare a dummy function to return current interrupt state(as we are doing now). Thank you, ---- Masami Hiramatsu -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

