lockdep: Add assertion to check if in an interrupt
authorJoel Fernandes (Google) <joel@joelfernandes.org>
Tue, 26 Mar 2019 19:24:08 +0000 (15:24 -0400)
committerPaul E. McKenney <paulmck@linux.ibm.com>
Sat, 25 May 2019 21:50:51 +0000 (14:50 -0700)
In rcu_rrupt_from_idle, we want to check if it is called from within an
interrupt, but want to do such checking only for debug builds. lockdep
already tracks when we enter an interrupt. Let us expose it as an
assertion macro so it can be used to assert this.

Suggested-by: Steven Rostedt <rostedt@goodmis.org>
Cc: kernel-team@android.com
Cc: rcu@vger.kernel.org
Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.ibm.com>
include/linux/lockdep.h

index 6e2377e6c1d6013d01457b452952cc038be0e07b..e8eef38b2213c3d60909ea6dd38eabd37fcfa13e 100644 (file)
@@ -632,11 +632,18 @@ do {                                                                      \
                          "IRQs not disabled as expected\n");           \
        } while (0)
 
+#define lockdep_assert_in_irq() do {                                   \
+               WARN_ONCE(debug_locks && !current->lockdep_recursion && \
+                         !current->hardirq_context,                    \
+                         "Not in hardirq as expected\n");              \
+       } while (0)
+
 #else
 # define might_lock(lock) do { } while (0)
 # define might_lock_read(lock) do { } while (0)
 # define lockdep_assert_irqs_enabled() do { } while (0)
 # define lockdep_assert_irqs_disabled() do { } while (0)
+# define lockdep_assert_in_irq() do { } while (0)
 #endif
 
 #ifdef CONFIG_LOCKDEP