cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

lock.h (2853B)


      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/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_LOCKDEP
     21
     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, lock->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, lock->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_STAT
     77
     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>