]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/linux/hardirq.h
Merge branch 'core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip...
[linux-2.6-omap-h63xx.git] / include / linux / hardirq.h
index 89a56d79e4c6c4987531a10ad8fed17f3d597bf7..f83288347dda3455e2deaa057112707accacaa93 100644 (file)
@@ -119,13 +119,17 @@ static inline void account_system_vtime(struct task_struct *tsk)
 }
 #endif
 
-#if defined(CONFIG_PREEMPT_RCU) && defined(CONFIG_NO_HZ)
+#if defined(CONFIG_NO_HZ) && !defined(CONFIG_CLASSIC_RCU)
 extern void rcu_irq_enter(void);
 extern void rcu_irq_exit(void);
+extern void rcu_nmi_enter(void);
+extern void rcu_nmi_exit(void);
 #else
 # define rcu_irq_enter() do { } while (0)
 # define rcu_irq_exit() do { } while (0)
-#endif /* CONFIG_PREEMPT_RCU */
+# define rcu_nmi_enter() do { } while (0)
+# define rcu_nmi_exit() do { } while (0)
+#endif /* #if defined(CONFIG_NO_HZ) && !defined(CONFIG_CLASSIC_RCU) */
 
 /*
  * It is safe to do non-atomic ops on ->hardirq_context,
@@ -135,7 +139,6 @@ extern void rcu_irq_exit(void);
  */
 #define __irq_enter()                                  \
        do {                                            \
-               rcu_irq_enter();                        \
                account_system_vtime(current);          \
                add_preempt_count(HARDIRQ_OFFSET);      \
                trace_hardirq_enter();                  \
@@ -154,7 +157,6 @@ extern void irq_enter(void);
                trace_hardirq_exit();                   \
                account_system_vtime(current);          \
                sub_preempt_count(HARDIRQ_OFFSET);      \
-               rcu_irq_exit();                         \
        } while (0)
 
 /*
@@ -166,11 +168,14 @@ extern void irq_exit(void);
        do {                                    \
                ftrace_nmi_enter();             \
                lockdep_off();                  \
+               rcu_nmi_enter();                \
                __irq_enter();                  \
        } while (0)
+
 #define nmi_exit()                             \
        do {                                    \
                __irq_exit();                   \
+               rcu_nmi_exit();                 \
                lockdep_on();                   \
                ftrace_nmi_exit();              \
        } while (0)