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