LCOV - code coverage report
Current view: top level - include/trace/events - irq.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 2 2 100.0 %
Date: 2021-04-22 12:43:58 Functions: 2 2 100.0 %

          Line data    Source code
       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             : 
      10             : struct irqaction;
      11             : struct 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             : 
      31             : SOFTIRQ_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             :  */
      53        6960 : TRACE_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             :  */
      83        6960 : TRACE_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             : 
     103             : DECLARE_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             :  */
     128             : DEFINE_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             :  */
     142             : DEFINE_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             :  */
     156             : DEFINE_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>

Generated by: LCOV version 1.14