Messages in this thread | | | Subject | Re: __update_max_tr: rcu_read_lock() used illegally while idle! | From | Steven Rostedt <> | Date | Tue, 31 Jul 2012 14:06:41 -0400 |
| |
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
| |