hardirq/nmi: Allow nested nmi_enter()
[sfrench/cifs-2.6.git] / include / linux / hardirq.h
index 7c8b82f6928881f64bb14f9c93a66978c8650074..a043ad826c6779973f1390d45c93dfd1c0c3ada2 100644 (file)
@@ -65,13 +65,16 @@ extern void irq_exit(void);
 #define arch_nmi_exit()                do { } while (0)
 #endif
 
+/*
+ * nmi_enter() can nest up to 15 times; see NMI_BITS.
+ */
 #define nmi_enter()                                            \
        do {                                                    \
                arch_nmi_enter();                               \
                printk_nmi_enter();                             \
                lockdep_off();                                  \
                ftrace_nmi_enter();                             \
-               BUG_ON(in_nmi());                               \
+               BUG_ON(in_nmi() == NMI_MASK);                   \
                preempt_count_add(NMI_OFFSET + HARDIRQ_OFFSET); \
                rcu_nmi_enter();                                \
                lockdep_hardirq_enter();                        \