xref: /linux/include/trace/events/lock.h (revision 5499b45190237ca90dd2ac86395cf464fe1f4cc7)
1 #undef TRACE_SYSTEM
2 #define TRACE_SYSTEM lock
3 
4 #if !defined(_TRACE_LOCK_H) || defined(TRACE_HEADER_MULTI_READ)
5 #define _TRACE_LOCK_H
6 
7 #include <linux/lockdep.h>
8 #include <linux/tracepoint.h>
9 
10 #ifdef CONFIG_LOCKDEP
11 
12 TRACE_EVENT(lock_acquire,
13 
14 	TP_PROTO(struct lockdep_map *lock, unsigned int subclass,
15 		int trylock, int read, int check,
16 		struct lockdep_map *next_lock, unsigned long ip),
17 
18 	TP_ARGS(lock, subclass, trylock, read, check, next_lock, ip),
19 
20 	TP_STRUCT__entry(
21 		__field(unsigned int, flags)
22 		__string(name, lock->name)
23 		__field(void *, lockdep_addr)
24 	),
25 
26 	TP_fast_assign(
27 		__entry->flags = (trylock ? 1 : 0) | (read ? 2 : 0);
28 		__assign_str(name, lock->name);
29 		__entry->lockdep_addr = lock;
30 	),
31 
32 	TP_printk("%p %s%s%s", __entry->lockdep_addr,
33 		  (__entry->flags & 1) ? "try " : "",
34 		  (__entry->flags & 2) ? "read " : "",
35 		  __get_str(name))
36 );
37 
38 TRACE_EVENT(lock_release,
39 
40 	TP_PROTO(struct lockdep_map *lock, int nested, unsigned long ip),
41 
42 	TP_ARGS(lock, nested, ip),
43 
44 	TP_STRUCT__entry(
45 		__string(name, lock->name)
46 		__field(void *, lockdep_addr)
47 	),
48 
49 	TP_fast_assign(
50 		__assign_str(name, lock->name);
51 		__entry->lockdep_addr = lock;
52 	),
53 
54 	TP_printk("%p %s",
55 		  __entry->lockdep_addr, __get_str(name))
56 );
57 
58 #ifdef CONFIG_LOCK_STAT
59 
60 TRACE_EVENT(lock_contended,
61 
62 	TP_PROTO(struct lockdep_map *lock, unsigned long ip),
63 
64 	TP_ARGS(lock, ip),
65 
66 	TP_STRUCT__entry(
67 		__string(name, lock->name)
68 		__field(void *, lockdep_addr)
69 	),
70 
71 	TP_fast_assign(
72 		__assign_str(name, lock->name);
73 		__entry->lockdep_addr = lock;
74 	),
75 
76 	TP_printk("%p %s",
77 		  __entry->lockdep_addr, __get_str(name))
78 );
79 
80 TRACE_EVENT(lock_acquired,
81 	TP_PROTO(struct lockdep_map *lock, unsigned long ip, s64 waittime),
82 
83 	TP_ARGS(lock, ip, waittime),
84 
85 	TP_STRUCT__entry(
86 		__string(name, lock->name)
87 		__field(s64, wait_nsec)
88 		__field(void *, lockdep_addr)
89 	),
90 
91 	TP_fast_assign(
92 		__assign_str(name, lock->name);
93 		__entry->wait_nsec = waittime;
94 		__entry->lockdep_addr = lock;
95 	),
96 	TP_printk("%p %s (%llu ns)", __entry->lockdep_addr,
97 		  __get_str(name),
98 		  __entry->wait_nsec)
99 );
100 
101 #endif
102 #endif
103 
104 #endif /* _TRACE_LOCK_H */
105 
106 /* This part must be outside protection */
107 #include <trace/define_trace.h>
108