0e956c9dfd7eed1676d049ab2f1c6375983ba556
[safe/jmp/linux-2.6] / include / trace / events / lockdep.h
1 #if !defined(_TRACE_LOCKDEP_H) || defined(TRACE_HEADER_MULTI_READ)
2 #define _TRACE_LOCKDEP_H
3
4 #include <linux/lockdep.h>
5 #include <linux/tracepoint.h>
6
7 #undef TRACE_SYSTEM
8 #define TRACE_SYSTEM lockdep
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_LOCKDEP_H */
94
95 /* This part must be outside protection */
96 #include <trace/define_trace.h>