mutex.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Mutexes: blocking mutual exclusion locks
  4. *
  5. * started by Ingo Molnar:
  6. *
  7. * Copyright (C) 2004, 2005, 2006 Red Hat, Inc., Ingo Molnar <[email protected]>
  8. */
  9. /*
  10. * This is the control structure for tasks blocked on mutex, which resides
  11. * on the blocked task's kernel stack:
  12. */
  13. struct mutex_waiter {
  14. struct list_head list;
  15. struct task_struct *task;
  16. struct ww_acquire_ctx *ww_ctx;
  17. #ifdef CONFIG_DEBUG_MUTEXES
  18. void *magic;
  19. #endif
  20. };
  21. #ifdef CONFIG_DEBUG_MUTEXES
  22. extern void debug_mutex_lock_common(struct mutex *lock,
  23. struct mutex_waiter *waiter);
  24. extern void debug_mutex_wake_waiter(struct mutex *lock,
  25. struct mutex_waiter *waiter);
  26. extern void debug_mutex_free_waiter(struct mutex_waiter *waiter);
  27. extern void debug_mutex_add_waiter(struct mutex *lock,
  28. struct mutex_waiter *waiter,
  29. struct task_struct *task);
  30. extern void debug_mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter,
  31. struct task_struct *task);
  32. extern void debug_mutex_unlock(struct mutex *lock);
  33. extern void debug_mutex_init(struct mutex *lock, const char *name,
  34. struct lock_class_key *key);
  35. #else /* CONFIG_DEBUG_MUTEXES */
  36. # define debug_mutex_lock_common(lock, waiter) do { } while (0)
  37. # define debug_mutex_wake_waiter(lock, waiter) do { } while (0)
  38. # define debug_mutex_free_waiter(waiter) do { } while (0)
  39. # define debug_mutex_add_waiter(lock, waiter, ti) do { } while (0)
  40. # define debug_mutex_remove_waiter(lock, waiter, ti) do { } while (0)
  41. # define debug_mutex_unlock(lock) do { } while (0)
  42. # define debug_mutex_init(lock, name, key) do { } while (0)
  43. #endif /* !CONFIG_DEBUG_MUTEXES */