Re: __update_max_tr: rcu_read_lock() used illegally while idle!

From: Steven Rostedt
Date: Tue Jul 31 2012 - 14:06:36 EST


On Tue, 2012-07-31 at 10:44 -0700, Paul E. McKenney wrote:

> OK, I interpret this as excluding NMI handlers, but please let me
> know if I am still being naive. ;-)
>

You are correct. This is only called where lockdep is called (to trace
enabling of IRQS). Note, that its called before normal irqs are actually
enabled (interrupts are still disabled), this is why it's called outside
of the in_irq() sections, because it is called just before returning
back to process context.

That said, because NMIs are so difficult, lockdep doesn't record the
disabling (and then enabling) of interrupts when an NMI triggers. Thus,
the irqsoff tracer also does not record NMIs. Which is fine, because
NMIs should not take long to run (we can add other mechanisms to time
NMI length if that is needed), and NMIs should not be enabling
interrupts nor taking any locks.

>From arch/x86/kernel/entry_64.S:

/* paranoidentry do_nmi, 0; without TRACE_IRQS_OFF */

-- Steve


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/