]> git.sesse.net Git - bcachefs-tools-debian/blob - include/trace/events/lock.h
rust: bump rpassword to v7.x
[bcachefs-tools-debian] / include / trace / events / lock.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #undef TRACE_SYSTEM
3 #define TRACE_SYSTEM lock
4
5 #if !defined(_TRACE_LOCK_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define _TRACE_LOCK_H
7
8 #include <linux/sched.h>
9 #include <linux/tracepoint.h>
10
11 /* flags for lock:contention_begin */
12 #define LCB_F_SPIN      (1U << 0)
13 #define LCB_F_READ      (1U << 1)
14 #define LCB_F_WRITE     (1U << 2)
15 #define LCB_F_RT        (1U << 3)
16 #define LCB_F_PERCPU    (1U << 4)
17 #define LCB_F_MUTEX     (1U << 5)
18
19
20 #ifdef CONFIG_LOCKDEP
21
22 #include <linux/lockdep.h>
23
24 TRACE_EVENT(lock_acquire,
25
26         TP_PROTO(struct lockdep_map *lock, unsigned int subclass,
27                 int trylock, int read, int check,
28                 struct lockdep_map *next_lock, unsigned long ip),
29
30         TP_ARGS(lock, subclass, trylock, read, check, next_lock, ip),
31
32         TP_STRUCT__entry(
33                 __field(unsigned int, flags)
34                 __string(name, lock->name)
35                 __field(void *, lockdep_addr)
36         ),
37
38         TP_fast_assign(
39                 __entry->flags = (trylock ? 1 : 0) | (read ? 2 : 0);
40                 __assign_str(name, lock->name);
41                 __entry->lockdep_addr = lock;
42         ),
43
44         TP_printk("%p %s%s%s", __entry->lockdep_addr,
45                   (__entry->flags & 1) ? "try " : "",
46                   (__entry->flags & 2) ? "read " : "",
47                   __get_str(name))
48 );
49
50 DECLARE_EVENT_CLASS(lock,
51
52         TP_PROTO(struct lockdep_map *lock, unsigned long ip),
53
54         TP_ARGS(lock, ip),
55
56         TP_STRUCT__entry(
57                 __string(       name,   lock->name      )
58                 __field(        void *, lockdep_addr    )
59         ),
60
61         TP_fast_assign(
62                 __assign_str(name, lock->name);
63                 __entry->lockdep_addr = lock;
64         ),
65
66         TP_printk("%p %s",  __entry->lockdep_addr, __get_str(name))
67 );
68
69 DEFINE_EVENT(lock, lock_release,
70
71         TP_PROTO(struct lockdep_map *lock, unsigned long ip),
72
73         TP_ARGS(lock, ip)
74 );
75
76 #ifdef CONFIG_LOCK_STAT
77
78 DEFINE_EVENT(lock, lock_contended,
79
80         TP_PROTO(struct lockdep_map *lock, unsigned long ip),
81
82         TP_ARGS(lock, ip)
83 );
84
85 DEFINE_EVENT(lock, lock_acquired,
86
87         TP_PROTO(struct lockdep_map *lock, unsigned long ip),
88
89         TP_ARGS(lock, ip)
90 );
91
92 #endif /* CONFIG_LOCK_STAT */
93 #endif /* CONFIG_LOCKDEP */
94
95 TRACE_EVENT(contention_begin,
96
97         TP_PROTO(void *lock, unsigned int flags),
98
99         TP_ARGS(lock, flags),
100
101         TP_STRUCT__entry(
102                 __field(void *, lock_addr)
103                 __field(unsigned int, flags)
104         ),
105
106         TP_fast_assign(
107                 __entry->lock_addr = lock;
108                 __entry->flags = flags;
109         ),
110
111         TP_printk("%p (flags=%s)", __entry->lock_addr,
112                   __print_flags(__entry->flags, "|",
113                                 { LCB_F_SPIN,           "SPIN" },
114                                 { LCB_F_READ,           "READ" },
115                                 { LCB_F_WRITE,          "WRITE" },
116                                 { LCB_F_RT,             "RT" },
117                                 { LCB_F_PERCPU,         "PERCPU" },
118                                 { LCB_F_MUTEX,          "MUTEX" }
119                           ))
120 );
121
122 TRACE_EVENT(contention_end,
123
124         TP_PROTO(void *lock, int ret),
125
126         TP_ARGS(lock, ret),
127
128         TP_STRUCT__entry(
129                 __field(void *, lock_addr)
130                 __field(int, ret)
131         ),
132
133         TP_fast_assign(
134                 __entry->lock_addr = lock;
135                 __entry->ret = ret;
136         ),
137
138         TP_printk("%p (ret=%d)", __entry->lock_addr, __entry->ret)
139 );
140
141 #endif /* _TRACE_LOCK_H */
142
143 /* This part must be outside protection */
144 #include <trace/define_trace.h>