1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #undef TRACE_SYSTEM 3 #define TRACE_SYSTEM lock 4 5 #if !defined(_TRACE_LOCK_H) || defined(TRACE_HEADER_MULTI_READ) 6 #define _TRACE_LOCK_H 7 8 #include <linux/lockdep.h> 9 #include <linux/tracepoint.h> 10 11 #ifdef CONFIG_LOCKDEP 12 13 TRACE_EVENT(lock_acquire, 14 15 TP_PROTO(struct lockdep_map *lock, unsigned int subclass, 16 int trylock, int read, int check, 17 struct lockdep_map *next_lock, unsigned long ip), 18 19 TP_ARGS(lock, subclass, trylock, read, check, next_lock, ip), 20 21 TP_STRUCT__entry( 22 __field(unsigned int, flags) 23 __string(name, lock->name) 24 __field(void *, lockdep_addr) 25 ), 26 27 TP_fast_assign( 28 __entry->flags = (trylock ? 1 : 0) | (read ? 2 : 0); 29 __assign_str(name, lock->name); 30 __entry->lockdep_addr = lock; 31 ), 32 33 TP_printk("%p %s%s%s", __entry->lockdep_addr, 34 (__entry->flags & 1) ? "try " : "", 35 (__entry->flags & 2) ? "read " : "", 36 __get_str(name)) 37 ); 38 39 DECLARE_EVENT_CLASS(lock, 40 41 TP_PROTO(struct lockdep_map *lock, unsigned long ip), 42 43 TP_ARGS(lock, ip), 44 45 TP_STRUCT__entry( 46 __string( name, lock->name ) 47 __field( void *, lockdep_addr ) 48 ), 49 50 TP_fast_assign( 51 __assign_str(name, lock->name); 52 __entry->lockdep_addr = lock; 53 ), 54 55 TP_printk("%p %s", __entry->lockdep_addr, __get_str(name)) 56 ); 57 58 DEFINE_EVENT(lock, lock_release, 59 60 TP_PROTO(struct lockdep_map *lock, unsigned long ip), 61 62 TP_ARGS(lock, ip) 63 ); 64 65 #ifdef CONFIG_LOCK_STAT 66 67 DEFINE_EVENT(lock, lock_contended, 68 69 TP_PROTO(struct lockdep_map *lock, unsigned long ip), 70 71 TP_ARGS(lock, ip) 72 ); 73 74 DEFINE_EVENT(lock, lock_acquired, 75 76 TP_PROTO(struct lockdep_map *lock, unsigned long ip), 77 78 TP_ARGS(lock, ip) 79 ); 80 81 #endif 82 #endif 83 84 #endif /* _TRACE_LOCK_H */ 85 86 /* This part must be outside protection */ 87 #include <trace/define_trace.h> 88