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

irq.h (3889B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#undef TRACE_SYSTEM
      3#define TRACE_SYSTEM irq
      4
      5#if !defined(_TRACE_IRQ_H) || defined(TRACE_HEADER_MULTI_READ)
      6#define _TRACE_IRQ_H
      7
      8#include <linux/tracepoint.h>
      9
     10struct irqaction;
     11struct softirq_action;
     12
     13#define SOFTIRQ_NAME_LIST				\
     14			 softirq_name(HI)		\
     15			 softirq_name(TIMER)		\
     16			 softirq_name(NET_TX)		\
     17			 softirq_name(NET_RX)		\
     18			 softirq_name(BLOCK)		\
     19			 softirq_name(IRQ_POLL)		\
     20			 softirq_name(TASKLET)		\
     21			 softirq_name(SCHED)		\
     22			 softirq_name(HRTIMER)		\
     23			 softirq_name_end(RCU)
     24
     25#undef softirq_name
     26#undef softirq_name_end
     27
     28#define softirq_name(sirq) TRACE_DEFINE_ENUM(sirq##_SOFTIRQ);
     29#define softirq_name_end(sirq)  TRACE_DEFINE_ENUM(sirq##_SOFTIRQ);
     30
     31SOFTIRQ_NAME_LIST
     32
     33#undef softirq_name
     34#undef softirq_name_end
     35
     36#define softirq_name(sirq) { sirq##_SOFTIRQ, #sirq },
     37#define softirq_name_end(sirq) { sirq##_SOFTIRQ, #sirq }
     38
     39#define show_softirq_name(val)				\
     40	__print_symbolic(val, SOFTIRQ_NAME_LIST)
     41
     42/**
     43 * irq_handler_entry - called immediately before the irq action handler
     44 * @irq: irq number
     45 * @action: pointer to struct irqaction
     46 *
     47 * The struct irqaction pointed to by @action contains various
     48 * information about the handler, including the device name,
     49 * @action->name, and the device id, @action->dev_id. When used in
     50 * conjunction with the irq_handler_exit tracepoint, we can figure
     51 * out irq handler latencies.
     52 */
     53TRACE_EVENT(irq_handler_entry,
     54
     55	TP_PROTO(int irq, struct irqaction *action),
     56
     57	TP_ARGS(irq, action),
     58
     59	TP_STRUCT__entry(
     60		__field(	int,	irq		)
     61		__string(	name,	action->name	)
     62	),
     63
     64	TP_fast_assign(
     65		__entry->irq = irq;
     66		__assign_str(name, action->name);
     67	),
     68
     69	TP_printk("irq=%d name=%s", __entry->irq, __get_str(name))
     70);
     71
     72/**
     73 * irq_handler_exit - called immediately after the irq action handler returns
     74 * @irq: irq number
     75 * @action: pointer to struct irqaction
     76 * @ret: return value
     77 *
     78 * If the @ret value is set to IRQ_HANDLED, then we know that the corresponding
     79 * @action->handler successfully handled this irq. Otherwise, the irq might be
     80 * a shared irq line, or the irq was not handled successfully. Can be used in
     81 * conjunction with the irq_handler_entry to understand irq handler latencies.
     82 */
     83TRACE_EVENT(irq_handler_exit,
     84
     85	TP_PROTO(int irq, struct irqaction *action, int ret),
     86
     87	TP_ARGS(irq, action, ret),
     88
     89	TP_STRUCT__entry(
     90		__field(	int,	irq	)
     91		__field(	int,	ret	)
     92	),
     93
     94	TP_fast_assign(
     95		__entry->irq	= irq;
     96		__entry->ret	= ret;
     97	),
     98
     99	TP_printk("irq=%d ret=%s",
    100		  __entry->irq, __entry->ret ? "handled" : "unhandled")
    101);
    102
    103DECLARE_EVENT_CLASS(softirq,
    104
    105	TP_PROTO(unsigned int vec_nr),
    106
    107	TP_ARGS(vec_nr),
    108
    109	TP_STRUCT__entry(
    110		__field(	unsigned int,	vec	)
    111	),
    112
    113	TP_fast_assign(
    114		__entry->vec = vec_nr;
    115	),
    116
    117	TP_printk("vec=%u [action=%s]", __entry->vec,
    118		  show_softirq_name(__entry->vec))
    119);
    120
    121/**
    122 * softirq_entry - called immediately before the softirq handler
    123 * @vec_nr:  softirq vector number
    124 *
    125 * When used in combination with the softirq_exit tracepoint
    126 * we can determine the softirq handler routine.
    127 */
    128DEFINE_EVENT(softirq, softirq_entry,
    129
    130	TP_PROTO(unsigned int vec_nr),
    131
    132	TP_ARGS(vec_nr)
    133);
    134
    135/**
    136 * softirq_exit - called immediately after the softirq handler returns
    137 * @vec_nr:  softirq vector number
    138 *
    139 * When used in combination with the softirq_entry tracepoint
    140 * we can determine the softirq handler routine.
    141 */
    142DEFINE_EVENT(softirq, softirq_exit,
    143
    144	TP_PROTO(unsigned int vec_nr),
    145
    146	TP_ARGS(vec_nr)
    147);
    148
    149/**
    150 * softirq_raise - called immediately when a softirq is raised
    151 * @vec_nr:  softirq vector number
    152 *
    153 * When used in combination with the softirq_entry tracepoint
    154 * we can determine the softirq raise to run latency.
    155 */
    156DEFINE_EVENT(softirq, softirq_raise,
    157
    158	TP_PROTO(unsigned int vec_nr),
    159
    160	TP_ARGS(vec_nr)
    161);
    162
    163#endif /*  _TRACE_IRQ_H */
    164
    165/* This part must be outside protection */
    166#include <trace/define_trace.h>