lockdep: Introduce wait-type checks
[sfrench/cifs-2.6.git] / include / linux / spinlock.h
index 031ce8617df8fff0eb06caf65df251297b5c6862..d3770b3f9d9a9bd35e5856a8cab65eda379ed01a 100644 (file)
 
 #ifdef CONFIG_DEBUG_SPINLOCK
   extern void __raw_spin_lock_init(raw_spinlock_t *lock, const char *name,
-                                  struct lock_class_key *key);
-# define raw_spin_lock_init(lock)                              \
-do {                                                           \
-       static struct lock_class_key __key;                     \
-                                                               \
-       __raw_spin_lock_init((lock), #lock, &__key);            \
+                                  struct lock_class_key *key, short inner);
+
+# define raw_spin_lock_init(lock)                                      \
+do {                                                                   \
+       static struct lock_class_key __key;                             \
+                                                                       \
+       __raw_spin_lock_init((lock), #lock, &__key, LD_WAIT_SPIN);      \
 } while (0)
 
 #else
@@ -327,12 +328,26 @@ static __always_inline raw_spinlock_t *spinlock_check(spinlock_t *lock)
        return &lock->rlock;
 }
 
-#define spin_lock_init(_lock)                          \
-do {                                                   \
-       spinlock_check(_lock);                          \
-       raw_spin_lock_init(&(_lock)->rlock);            \
+#ifdef CONFIG_DEBUG_SPINLOCK
+
+# define spin_lock_init(lock)                                  \
+do {                                                           \
+       static struct lock_class_key __key;                     \
+                                                               \
+       __raw_spin_lock_init(spinlock_check(lock),              \
+                            #lock, &__key, LD_WAIT_CONFIG);    \
+} while (0)
+
+#else
+
+# define spin_lock_init(_lock)                 \
+do {                                           \
+       spinlock_check(_lock);                  \
+       *(_lock) = __SPIN_LOCK_UNLOCKED(_lock); \
 } while (0)
 
+#endif
+
 static __always_inline void spin_lock(spinlock_t *lock)
 {
        raw_spin_lock(&lock->rlock);