Re: [PATCH] printk/tracing: Do not trace printk_nmi_enter()

From: Peter Zijlstra
Date: Fri Sep 07 2018 - 09:45:44 EST


On Fri, Sep 07, 2018 at 09:41:48AM -0400, Steven Rostedt wrote:
> On Fri, 7 Sep 2018 09:34:48 +0200
> Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
>
> > On Wed, Sep 05, 2018 at 09:33:34PM -0400, Steven Rostedt wrote:
> > > do_idle {
> > >
> > > [interrupts enabled]
> > >
> > > <interrupt> [interrupts disabled]
> > > TRACE_IRQS_OFF [lockdep says irqs off]
> > > [...]
> > > TRACE_IRQS_IRET
> > > test if pt_regs say return to interrupts enabled [yes]
> > > TRACE_IRQS_ON [lockdep says irqs are on]
> > >
> > > <nmi>
> > > nmi_enter() {
> > > printk_nmi_enter() [traced by ftrace]
> > > [ hit ftrace breakpoint ]
> > > <breakpoint exception>
> > > TRACE_IRQS_OFF [lockdep says irqs off]
> > > [...]
> > > TRACE_IRQS_IRET [return from breakpoint]
> > > test if pt_regs say interrupts enabled [no]
> > > [iret back to interrupt]
> > > [iret back to code]
> > >
> > > tick_nohz_idle_enter() {
> > >
> > > lockdep_assert_irqs_enabled() [lockdep say no!]
> >
> > Isn't the problem that we muck with the IRQ state from NMI context? We
> > shouldn't be doing that.
>
> Not really.

Yes really, we should not muck with the IRQ state from NMI context.