xref: /openbmc/linux/include/trace/events/lock.h (revision b6dcefde)
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 	),
24 
25 	TP_fast_assign(
26 		__entry->flags = (trylock ? 1 : 0) | (read ? 2 : 0);
27 		__assign_str(name, lock->name);
28 	),
29 
30 	TP_printk("%s%s%s", (__entry->flags & 1) ? "try " : "",
31 		  (__entry->flags & 2) ? "read " : "",
32 		  __get_str(name))
33 );
34 
35 TRACE_EVENT(lock_release,
36 
37 	TP_PROTO(struct lockdep_map *lock, int nested, unsigned long ip),
38 
39 	TP_ARGS(lock, nested, ip),
40 
41 	TP_STRUCT__entry(
42 		__string(name, lock->name)
43 	),
44 
45 	TP_fast_assign(
46 		__assign_str(name, lock->name);
47 	),
48 
49 	TP_printk("%s", __get_str(name))
50 );
51 
52 #ifdef CONFIG_LOCK_STAT
53 
54 TRACE_EVENT(lock_contended,
55 
56 	TP_PROTO(struct lockdep_map *lock, unsigned long ip),
57 
58 	TP_ARGS(lock, ip),
59 
60 	TP_STRUCT__entry(
61 		__string(name, lock->name)
62 	),
63 
64 	TP_fast_assign(
65 		__assign_str(name, lock->name);
66 	),
67 
68 	TP_printk("%s", __get_str(name))
69 );
70 
71 TRACE_EVENT(lock_acquired,
72 	TP_PROTO(struct lockdep_map *lock, unsigned long ip, s64 waittime),
73 
74 	TP_ARGS(lock, ip, waittime),
75 
76 	TP_STRUCT__entry(
77 		__string(name, lock->name)
78 		__field(unsigned long, wait_usec)
79 		__field(unsigned long, wait_nsec_rem)
80 	),
81 	TP_fast_assign(
82 		__assign_str(name, lock->name);
83 		__entry->wait_nsec_rem = do_div(waittime, NSEC_PER_USEC);
84 		__entry->wait_usec = (unsigned long) waittime;
85 	),
86 	TP_printk("%s (%lu.%03lu us)", __get_str(name), __entry->wait_usec,
87 				       __entry->wait_nsec_rem)
88 );
89 
90 #endif
91 #endif
92 
93 #endif /* _TRACE_LOCK_H */
94 
95 /* This part must be outside protection */
96 #include <trace/define_trace.h>
97