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