Messages in this thread | | | Date | Tue, 17 Nov 2015 12:23:33 -0500 | From | Steven Rostedt <> | Subject | Re: trace: trace_kprobe.c always shows interrupts off |
| |
On Tue, 17 Nov 2015 16:35:35 +0000 (UTC) Mathieu Desnoyers <mathieu.desnoyers@efficios.com> 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.
> > 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.
-- Steve
| |