2009-04-10 08:54:16 -04:00
# if !defined(_TRACE_IRQ_H) || defined(TRACE_HEADER_MULTI_READ)
2009-02-26 10:11:05 -05:00
# define _TRACE_IRQ_H
# include <linux/tracepoint.h>
2009-04-10 08:54:16 -04:00
# include <linux/interrupt.h>
# undef TRACE_SYSTEM
# define TRACE_SYSTEM irq
2009-04-30 13:29:47 -04:00
/**
* irq_handler_entry - called immediately before the irq action handler
* @ irq : irq number
* @ action : pointer to struct irqaction
*
* The struct irqaction pointed to by @ action contains various
* information about the handler , including the device name ,
* @ action - > name , and the device id , @ action - > dev_id . When used in
* conjunction with the irq_handler_exit tracepoint , we can figure
* out irq handler latencies .
2009-04-10 08:54:16 -04:00
*/
2009-04-24 11:26:55 -04:00
TRACE_EVENT ( irq_handler_entry ,
2009-04-10 08:54:16 -04:00
TP_PROTO ( int irq , struct irqaction * action ) ,
2009-04-24 11:26:55 -04:00
2009-04-10 08:54:16 -04:00
TP_ARGS ( irq , action ) ,
2009-04-24 11:26:55 -04:00
TP_STRUCT__entry (
__field ( int , irq )
__string ( name , action - > name )
) ,
TP_fast_assign (
__entry - > irq = irq ;
__assign_str ( name , action - > name ) ;
) ,
TP_printk ( " irq=%d handler=%s " , __entry - > irq , __get_str ( name ) )
) ;
2009-04-10 08:54:16 -04:00
2009-04-30 13:29:47 -04:00
/**
* irq_handler_exit - called immediately after the irq action handler returns
* @ irq : irq number
* @ action : pointer to struct irqaction
* @ ret : return value
*
* If the @ ret value is set to IRQ_HANDLED , then we know that the corresponding
* @ action - > handler scuccessully handled this irq . Otherwise , the irq might be
* a shared irq line , or the irq was not handled successfully . Can be used in
* conjunction with the irq_handler_entry to understand irq handler latencies .
2009-04-10 08:54:16 -04:00
*/
TRACE_EVENT ( irq_handler_exit ,
TP_PROTO ( int irq , struct irqaction * action , int ret ) ,
TP_ARGS ( irq , action , ret ) ,
TP_STRUCT__entry (
__field ( int , irq )
__field ( int , ret )
) ,
TP_fast_assign (
__entry - > irq = irq ;
__entry - > ret = ret ;
) ,
TP_printk ( " irq=%d return=%s " ,
__entry - > irq , __entry - > ret ? " handled " : " unhandled " )
) ;
2009-04-30 13:29:47 -04:00
/**
* softirq_entry - called immediately before the softirq handler
* @ h : pointer to struct softirq_action
* @ vec : pointer to first struct softirq_action in softirq_vec array
*
* The @ h parameter , contains a pointer to the struct softirq_action
* which has a pointer to the action handler that is called . By subtracting
* the @ vec pointer from the @ h pointer , we can determine the softirq
* number . Also , when used in combination with the softirq_exit tracepoint
* we can determine the softirq latency .
*/
2009-04-24 11:26:55 -04:00
TRACE_EVENT ( softirq_entry ,
2009-04-10 08:54:16 -04:00
TP_PROTO ( struct softirq_action * h , struct softirq_action * vec ) ,
2009-04-24 11:26:55 -04:00
2009-04-10 08:54:16 -04:00
TP_ARGS ( h , vec ) ,
2009-02-26 10:11:05 -05:00
2009-04-24 11:26:55 -04:00
TP_STRUCT__entry (
__field ( int , vec )
__string ( name , softirq_to_name [ h - vec ] )
) ,
TP_fast_assign (
__entry - > vec = ( int ) ( h - vec ) ;
__assign_str ( name , softirq_to_name [ h - vec ] ) ;
) ,
TP_printk ( " softirq=%d action=%s " , __entry - > vec , __get_str ( name ) )
) ;
2009-04-30 13:29:47 -04:00
/**
* softirq_exit - called immediately after the softirq handler returns
* @ h : pointer to struct softirq_action
* @ vec : pointer to first struct softirq_action in softirq_vec array
*
* The @ h parameter contains a pointer to the struct softirq_action
* that has handled the softirq . By subtracting the @ vec pointer from
* the @ h pointer , we can determine the softirq number . Also , when used in
* combination with the softirq_entry tracepoint we can determine the softirq
* latency .
*/
2009-04-24 11:26:55 -04:00
TRACE_EVENT ( softirq_exit ,
2009-04-10 08:54:16 -04:00
TP_PROTO ( struct softirq_action * h , struct softirq_action * vec ) ,
2009-04-24 11:26:55 -04:00
2009-04-10 08:54:16 -04:00
TP_ARGS ( h , vec ) ,
2009-04-24 11:26:55 -04:00
TP_STRUCT__entry (
__field ( int , vec )
__string ( name , softirq_to_name [ h - vec ] )
) ,
TP_fast_assign (
__entry - > vec = ( int ) ( h - vec ) ;
__assign_str ( name , softirq_to_name [ h - vec ] ) ;
) ,
TP_printk ( " softirq=%d action=%s " , __entry - > vec , __get_str ( name ) )
) ;
2009-02-26 10:11:05 -05:00
2009-04-10 09:36:00 -04:00
# endif /* _TRACE_IRQ_H */
/* This part must be outside protection */
# include <trace/define_trace.h>