mutex-debug.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * Mutexes: blocking mutual exclusion locks
  3. *
  4. * started by Ingo Molnar:
  5. *
  6. * Copyright (C) 2004, 2005, 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
  7. *
  8. * This file contains mutex debugging related internal declarations,
  9. * prototypes and inline functions, for the CONFIG_DEBUG_MUTEXES case.
  10. * More details are in kernel/mutex-debug.c.
  11. */
  12. /*
  13. * This must be called with lock->wait_lock held.
  14. */
  15. extern void
  16. debug_mutex_set_owner(struct mutex *lock, struct thread_info *new_owner);
  17. static inline void debug_mutex_clear_owner(struct mutex *lock)
  18. {
  19. lock->owner = NULL;
  20. }
  21. extern void debug_mutex_lock_common(struct mutex *lock,
  22. struct mutex_waiter *waiter);
  23. extern void debug_mutex_wake_waiter(struct mutex *lock,
  24. struct mutex_waiter *waiter);
  25. extern void debug_mutex_free_waiter(struct mutex_waiter *waiter);
  26. extern void debug_mutex_add_waiter(struct mutex *lock,
  27. struct mutex_waiter *waiter,
  28. struct thread_info *ti);
  29. extern void mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter,
  30. struct thread_info *ti);
  31. extern void debug_mutex_unlock(struct mutex *lock);
  32. extern void debug_mutex_init(struct mutex *lock, const char *name,
  33. struct lock_class_key *key);
  34. #define spin_lock_mutex(lock, flags) \
  35. do { \
  36. struct mutex *l = container_of(lock, struct mutex, wait_lock); \
  37. \
  38. DEBUG_LOCKS_WARN_ON(in_interrupt()); \
  39. local_irq_save(flags); \
  40. __raw_spin_lock(&(lock)->raw_lock); \
  41. DEBUG_LOCKS_WARN_ON(l->magic != l); \
  42. } while (0)
  43. #define spin_unlock_mutex(lock, flags) \
  44. do { \
  45. __raw_spin_unlock(&(lock)->raw_lock); \
  46. local_irq_restore(flags); \
  47. preempt_check_resched(); \
  48. } while (0)