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 13TRACE_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 39DECLARE_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 58DEFINE_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 67DEFINE_EVENT(lock, lock_contended, 68 69 TP_PROTO(struct lockdep_map *lock, unsigned long ip), 70 71 TP_ARGS(lock, ip) 72); 73 74DEFINE_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