xref: /linux/include/trace/events/lock.h (revision e58e871becec2d3b04ed91c0c16fe8deac9c9dfa)
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 DECLARE_EVENT_CLASS(lock,
39 
40 	TP_PROTO(struct lockdep_map *lock, unsigned long ip),
41 
42 	TP_ARGS(lock, 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",  __entry->lockdep_addr, __get_str(name))
55 );
56 
57 DEFINE_EVENT(lock, lock_release,
58 
59 	TP_PROTO(struct lockdep_map *lock, unsigned long ip),
60 
61 	TP_ARGS(lock, ip)
62 );
63 
64 #ifdef CONFIG_LOCK_STAT
65 
66 DEFINE_EVENT(lock, lock_contended,
67 
68 	TP_PROTO(struct lockdep_map *lock, unsigned long ip),
69 
70 	TP_ARGS(lock, ip)
71 );
72 
73 DEFINE_EVENT(lock, lock_acquired,
74 
75 	TP_PROTO(struct lockdep_map *lock, unsigned long ip),
76 
77 	TP_ARGS(lock, ip)
78 );
79 
80 #endif
81 #endif
82 
83 #endif /* _TRACE_LOCK_H */
84 
85 /* This part must be outside protection */
86 #include <trace/define_trace.h>
87