Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
[sfrench/cifs-2.6.git] / kernel / mutex-debug.h
index fd384050acb1b7933ac414774cdf5aa4ae49fb48..babfbdfc534b7127e3769405433499f1929a44a5 100644 (file)
  * More details are in kernel/mutex-debug.c.
  */
 
-extern spinlock_t debug_mutex_lock;
-extern struct list_head debug_mutex_held_locks;
-extern int debug_mutex_on;
-
-/*
- * In the debug case we carry the caller's instruction pointer into
- * other functions, but we dont want the function argument overhead
- * in the nondebug case - hence these macros:
- */
-#define __IP_DECL__            , unsigned long ip
-#define __IP__                 , ip
-#define __RET_IP__             , (unsigned long)__builtin_return_address(0)
-
 /*
  * This must be called with lock->wait_lock held.
  */
-extern void debug_mutex_set_owner(struct mutex *lock,
-                                 struct thread_info *new_owner __IP_DECL__);
+extern void
+debug_mutex_set_owner(struct mutex *lock, struct thread_info *new_owner);
 
 static inline void debug_mutex_clear_owner(struct mutex *lock)
 {
        lock->owner = NULL;
 }
 
-extern void debug_mutex_init_waiter(struct mutex_waiter *waiter);
+extern void debug_mutex_lock_common(struct mutex *lock,
+                                   struct mutex_waiter *waiter);
 extern void debug_mutex_wake_waiter(struct mutex *lock,
                                    struct mutex_waiter *waiter);
 extern void debug_mutex_free_waiter(struct mutex_waiter *waiter);
 extern void debug_mutex_add_waiter(struct mutex *lock,
                                   struct mutex_waiter *waiter,
-                                  struct thread_info *ti __IP_DECL__);
+                                  struct thread_info *ti);
 extern void mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter,
                                struct thread_info *ti);
 extern void debug_mutex_unlock(struct mutex *lock);
-extern void debug_mutex_init(struct mutex *lock, const char *name);
-
-#define debug_spin_lock(lock)                          \
-       do {                                            \
-               local_irq_disable();                    \
-               if (debug_mutex_on)                     \
-                       spin_lock(lock);                \
-       } while (0)
+extern void debug_mutex_init(struct mutex *lock, const char *name,
+                            struct lock_class_key *key);
 
-#define debug_spin_unlock(lock)                                \
-       do {                                            \
-               if (debug_mutex_on)                     \
-                       spin_unlock(lock);              \
-               local_irq_enable();                     \
-               preempt_check_resched();                \
-       } while (0)
-
-#define debug_spin_lock_save(lock, flags)              \
+#define spin_lock_mutex(lock, flags)                   \
        do {                                            \
+               struct mutex *l = container_of(lock, struct mutex, wait_lock); \
+                                                       \
+               DEBUG_LOCKS_WARN_ON(in_interrupt());    \
                local_irq_save(flags);                  \
-               if (debug_mutex_on)                     \
-                       spin_lock(lock);                \
+               __raw_spin_lock(&(lock)->raw_lock);     \
+               DEBUG_LOCKS_WARN_ON(l->magic != l);     \
        } while (0)
 
-#define debug_spin_lock_restore(lock, flags)           \
+#define spin_unlock_mutex(lock, flags)                 \
        do {                                            \
-               if (debug_mutex_on)                     \
-                       spin_unlock(lock);              \
+               __raw_spin_unlock(&(lock)->raw_lock);   \
                local_irq_restore(flags);               \
                preempt_check_resched();                \
        } while (0)
-
-#define spin_lock_mutex(lock)                          \
-       do {                                            \
-               struct mutex *l = container_of(lock, struct mutex, wait_lock); \
-                                                       \
-               DEBUG_WARN_ON(in_interrupt());          \
-               debug_spin_lock(&debug_mutex_lock);     \
-               spin_lock(lock);                        \
-               DEBUG_WARN_ON(l->magic != l);           \
-       } while (0)
-
-#define spin_unlock_mutex(lock)                                \
-       do {                                            \
-               spin_unlock(lock);                      \
-               debug_spin_unlock(&debug_mutex_lock);   \
-       } while (0)
-
-#define DEBUG_OFF()                                    \
-do {                                                   \
-       if (debug_mutex_on) {                           \
-               debug_mutex_on = 0;                     \
-               console_verbose();                      \
-               if (spin_is_locked(&debug_mutex_lock))  \
-                       spin_unlock(&debug_mutex_lock); \
-       }                                               \
-} while (0)
-
-#define DEBUG_BUG()                                    \
-do {                                                   \
-       if (debug_mutex_on) {                           \
-               DEBUG_OFF();                            \
-               BUG();                                  \
-       }                                               \
-} while (0)
-
-#define DEBUG_WARN_ON(c)                               \
-do {                                                   \
-       if (unlikely(c && debug_mutex_on)) {            \
-               DEBUG_OFF();                            \
-               WARN_ON(1);                             \
-       }                                               \
-} while (0)
-
-# define DEBUG_BUG_ON(c)                               \
-do {                                                   \
-       if (unlikely(c))                                \
-               DEBUG_BUG();                            \
-} while (0)
-
-#ifdef CONFIG_SMP
-# define SMP_DEBUG_WARN_ON(c)                  DEBUG_WARN_ON(c)
-# define SMP_DEBUG_BUG_ON(c)                   DEBUG_BUG_ON(c)
-#else
-# define SMP_DEBUG_WARN_ON(c)                  do { } while (0)
-# define SMP_DEBUG_BUG_ON(c)                   do { } while (0)
-#endif
-