brintos

brintos / linux-shallow public Read only

0
0
Text · 2.8 KiB · 8e89baa Raw
145 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#undef TRACE_SYSTEM3#define TRACE_SYSTEM lock4 5#if !defined(_TRACE_LOCK_H) || defined(TRACE_HEADER_MULTI_READ)6#define _TRACE_LOCK_H7 8#include <linux/sched.h>9#include <linux/tracepoint.h>10 11/* flags for lock:contention_begin */12#define LCB_F_SPIN	(1U << 0)13#define LCB_F_READ	(1U << 1)14#define LCB_F_WRITE	(1U << 2)15#define LCB_F_RT	(1U << 3)16#define LCB_F_PERCPU	(1U << 4)17#define LCB_F_MUTEX	(1U << 5)18 19 20#ifdef CONFIG_LOCKDEP21 22#include <linux/lockdep.h>23 24TRACE_EVENT(lock_acquire,25 26	TP_PROTO(struct lockdep_map *lock, unsigned int subclass,27		int trylock, int read, int check,28		struct lockdep_map *next_lock, unsigned long ip),29 30	TP_ARGS(lock, subclass, trylock, read, check, next_lock, ip),31 32	TP_STRUCT__entry(33		__field(unsigned int, flags)34		__string(name, lock->name)35		__field(void *, lockdep_addr)36	),37 38	TP_fast_assign(39		__entry->flags = (trylock ? 1 : 0) | (read ? 2 : 0);40		__assign_str(name);41		__entry->lockdep_addr = lock;42	),43 44	TP_printk("%p %s%s%s", __entry->lockdep_addr,45		  (__entry->flags & 1) ? "try " : "",46		  (__entry->flags & 2) ? "read " : "",47		  __get_str(name))48);49 50DECLARE_EVENT_CLASS(lock,51 52	TP_PROTO(struct lockdep_map *lock, unsigned long ip),53 54	TP_ARGS(lock, ip),55 56	TP_STRUCT__entry(57		__string(	name, 	lock->name	)58		__field(	void *, lockdep_addr	)59	),60 61	TP_fast_assign(62		__assign_str(name);63		__entry->lockdep_addr = lock;64	),65 66	TP_printk("%p %s",  __entry->lockdep_addr, __get_str(name))67);68 69DEFINE_EVENT(lock, lock_release,70 71	TP_PROTO(struct lockdep_map *lock, unsigned long ip),72 73	TP_ARGS(lock, ip)74);75 76#ifdef CONFIG_LOCK_STAT77 78DEFINE_EVENT(lock, lock_contended,79 80	TP_PROTO(struct lockdep_map *lock, unsigned long ip),81 82	TP_ARGS(lock, ip)83);84 85DEFINE_EVENT(lock, lock_acquired,86 87	TP_PROTO(struct lockdep_map *lock, unsigned long ip),88 89	TP_ARGS(lock, ip)90);91 92#endif /* CONFIG_LOCK_STAT */93#endif /* CONFIG_LOCKDEP */94 95TRACE_EVENT(contention_begin,96 97	TP_PROTO(void *lock, unsigned int flags),98 99	TP_ARGS(lock, flags),100 101	TP_STRUCT__entry(102		__field(void *, lock_addr)103		__field(unsigned int, flags)104	),105 106	TP_fast_assign(107		__entry->lock_addr = lock;108		__entry->flags = flags;109	),110 111	TP_printk("%p (flags=%s)", __entry->lock_addr,112		  __print_flags(__entry->flags, "|",113				{ LCB_F_SPIN,		"SPIN" },114				{ LCB_F_READ,		"READ" },115				{ LCB_F_WRITE,		"WRITE" },116				{ LCB_F_RT,		"RT" },117				{ LCB_F_PERCPU,		"PERCPU" },118				{ LCB_F_MUTEX,		"MUTEX" }119			  ))120);121 122TRACE_EVENT(contention_end,123 124	TP_PROTO(void *lock, int ret),125 126	TP_ARGS(lock, ret),127 128	TP_STRUCT__entry(129		__field(void *, lock_addr)130		__field(int, ret)131	),132 133	TP_fast_assign(134		__entry->lock_addr = lock;135		__entry->ret = ret;136	),137 138	TP_printk("%p (ret=%d)", __entry->lock_addr, __entry->ret)139);140 141#endif /* _TRACE_LOCK_H */142 143/* This part must be outside protection */144#include <trace/define_trace.h>145