printf: Remove unused 'bprintf'
[drm/drm-misc.git] / include / linux / mutex_types.h
blobfdf7f515fde8e3e06c4dd7204bcd7a469e2a76eb
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __LINUX_MUTEX_TYPES_H
3 #define __LINUX_MUTEX_TYPES_H
5 #include <linux/atomic.h>
6 #include <linux/lockdep_types.h>
7 #include <linux/osq_lock.h>
8 #include <linux/spinlock_types.h>
9 #include <linux/types.h>
11 #ifndef CONFIG_PREEMPT_RT
14 * Simple, straightforward mutexes with strict semantics:
16 * - only one task can hold the mutex at a time
17 * - only the owner can unlock the mutex
18 * - multiple unlocks are not permitted
19 * - recursive locking is not permitted
20 * - a mutex object must be initialized via the API
21 * - a mutex object must not be initialized via memset or copying
22 * - task may not exit with mutex held
23 * - memory areas where held locks reside must not be freed
24 * - held mutexes must not be reinitialized
25 * - mutexes may not be used in hardware or software interrupt
26 * contexts such as tasklets and timers
28 * These semantics are fully enforced when DEBUG_MUTEXES is
29 * enabled. Furthermore, besides enforcing the above rules, the mutex
30 * debugging code also implements a number of additional features
31 * that make lock debugging easier and faster:
33 * - uses symbolic names of mutexes, whenever they are printed in debug output
34 * - point-of-acquire tracking, symbolic lookup of function names
35 * - list of all locks held in the system, printout of them
36 * - owner tracking
37 * - detects self-recursing locks and prints out all relevant info
38 * - detects multi-task circular deadlocks and prints out all affected
39 * locks and tasks (and only those tasks)
41 struct mutex {
42 atomic_long_t owner;
43 raw_spinlock_t wait_lock;
44 #ifdef CONFIG_MUTEX_SPIN_ON_OWNER
45 struct optimistic_spin_queue osq; /* Spinner MCS lock */
46 #endif
47 struct list_head wait_list;
48 #ifdef CONFIG_DEBUG_MUTEXES
49 void *magic;
50 #endif
51 #ifdef CONFIG_DEBUG_LOCK_ALLOC
52 struct lockdep_map dep_map;
53 #endif
56 #else /* !CONFIG_PREEMPT_RT */
58 * Preempt-RT variant based on rtmutexes.
60 #include <linux/rtmutex.h>
62 struct mutex {
63 struct rt_mutex_base rtmutex;
64 #ifdef CONFIG_DEBUG_LOCK_ALLOC
65 struct lockdep_map dep_map;
66 #endif
69 #endif /* CONFIG_PREEMPT_RT */
71 #endif /* __LINUX_MUTEX_TYPES_H */