Something went wrong. Try again.
Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161/* SPDX-License-Identifier: GPL-2.0 */#undef TRACE_SYSTEM#define TRACE_SYSTEM lock
#if !defined(_TRACE_LOCK_H) || defined(TRACE_HEADER_MULTI_READ)#define _TRACE_LOCK_H
#include <linux/tracepoint.h>
/* flags for lock:contention_begin */#define LCB_F_SPIN (1U << 0)#define LCB_F_READ (1U << 1)#define LCB_F_WRITE (1U << 2)#define LCB_F_RT (1U << 3)#define LCB_F_PERCPU (1U << 4)#define LCB_F_MUTEX (1U << 5)
#ifdef CONFIG_LOCKDEP
#include <linux/lockdep.h>
TRACE_EVENT(lock_acquire,
TP_PROTO(struct lockdep_map *lock, unsigned int subclass, int trylock, int read, int check, struct lockdep_map *next_lock, unsigned long ip),
TP_ARGS(lock, subclass, trylock, read, check, next_lock, ip),
TP_STRUCT__entry( __field(unsigned int, flags) __string(name, lock->name) __field(void *, lockdep_addr) ),
TP_fast_assign( __entry->flags = (trylock ? 1 : 0) | (read ? 2 : 0); __assign_str(name); __entry->lockdep_addr = lock; ),
TP_printk("%p %s%s%s", __entry->lockdep_addr, (__entry->flags & 1) ? "try " : "", (__entry->flags & 2) ? "read " : "", __get_str(name)));
DECLARE_EVENT_CLASS(lock,
TP_PROTO(struct lockdep_map *lock, unsigned long ip),
TP_ARGS(lock, ip),
TP_STRUCT__entry( __string( name, lock->name ) __field( void *, lockdep_addr ) ),
TP_fast_assign( __assign_str(name); __entry->lockdep_addr = lock; ),
TP_printk("%p %s", __entry->lockdep_addr, __get_str(name)));
DEFINE_EVENT(lock, lock_release,
TP_PROTO(struct lockdep_map *lock, unsigned long ip),
TP_ARGS(lock, ip));
#ifdef CONFIG_LOCK_STAT
DEFINE_EVENT(lock, lock_contended,
TP_PROTO(struct lockdep_map *lock, unsigned long ip),
TP_ARGS(lock, ip));
DEFINE_EVENT(lock, lock_acquired,
TP_PROTO(struct lockdep_map *lock, unsigned long ip),
TP_ARGS(lock, ip));
#endif /* CONFIG_LOCK_STAT */#endif /* CONFIG_LOCKDEP */
TRACE_EVENT(contention_begin,
TP_PROTO(void *lock, unsigned int flags),
TP_ARGS(lock, flags),
TP_STRUCT__entry( __field(void *, lock_addr) __field(unsigned int, flags) ),
TP_fast_assign( __entry->lock_addr = lock; __entry->flags = flags; ),
TP_printk("%p (flags=%s)", __entry->lock_addr, __print_flags(__entry->flags, "|", { LCB_F_SPIN, "SPIN" }, { LCB_F_READ, "READ" }, { LCB_F_WRITE, "WRITE" }, { LCB_F_RT, "RT" }, { LCB_F_PERCPU, "PERCPU" }, { LCB_F_MUTEX, "MUTEX" } )));
TRACE_EVENT(contention_end,
TP_PROTO(void *lock, int ret),
TP_ARGS(lock, ret),
TP_STRUCT__entry( __field(void *, lock_addr) __field(int, ret) ),
TP_fast_assign( __entry->lock_addr = lock; __entry->ret = ret; ),
TP_printk("%p (ret=%d)", __entry->lock_addr, __entry->ret));
TRACE_EVENT(contended_release,
TP_PROTO(void *lock),
TP_ARGS(lock),
TP_STRUCT__entry( __field(void *, lock_addr) ),
TP_fast_assign( __entry->lock_addr = lock; ),
TP_printk("%p", __entry->lock_addr));
#endif /* _TRACE_LOCK_H */
/* This part must be outside protection */#include <trace/define_trace.h>