2018-03-22 10:08:48 -07:00
/* SPDX-License-Identifier: GPL-2.0 */
2018-04-26 08:08:09 -07:00
/* Copyright(c) 2013 - 2018 Intel Corporation. */
2017-04-13 04:45:44 -04:00
/* Modeled on trace-events-sample.h */
/* The trace subsystem name for i40e will be "i40e".
*
* This file is named i40e_trace . h .
*
* Since this include file ' s name is different from the trace
* subsystem name , we ' ll have to define TRACE_INCLUDE_FILE at the end
* of this file .
*/
# undef TRACE_SYSTEM
# define TRACE_SYSTEM i40e
/* See trace-events-sample.h for a detailed description of why this
* guard clause is different from most normal include files .
*/
# if !defined(_I40E_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
# define _I40E_TRACE_H_
# include <linux/tracepoint.h>
2020-09-25 15:24:37 -07:00
/*
2017-04-13 04:45:44 -04:00
* i40e_trace ( ) macro enables shared code to refer to trace points
* like :
*
* trace_i40e { , vf } _example ( args . . . )
*
* . . . as :
*
* i40e_trace ( example , args . . . )
*
* . . . to resolve to the PF or VF version of the tracepoint without
* ifdefs , and to allow tracepoints to be disabled entirely at build
* time .
*
* Trace point should always be referred to in the driver via this
* macro .
*
* Similarly , i40e_trace_enabled ( trace_name ) wraps references to
* trace_i40e { , vf } _ < trace_name > _enabled ( ) functions .
*/
# define _I40E_TRACE_NAME(trace_name) (trace_ ## i40e ## _ ## trace_name)
# define I40E_TRACE_NAME(trace_name) _I40E_TRACE_NAME(trace_name)
# define i40e_trace(trace_name, args...) I40E_TRACE_NAME(trace_name)(args)
# define i40e_trace_enabled(trace_name) I40E_TRACE_NAME(trace_name##_enabled)()
/* Events common to PF and VF. Corresponding versions will be defined
* for both , named trace_i40e_ * and trace_i40evf_ * . The i40e_trace ( )
* macro above will select the right trace point name for the driver
* being built from shared code .
*/
/* Events related to a vsi & ring */
DECLARE_EVENT_CLASS (
i40e_tx_template ,
TP_PROTO ( struct i40e_ring * ring ,
struct i40e_tx_desc * desc ,
struct i40e_tx_buffer * buf ) ,
TP_ARGS ( ring , desc , buf ) ,
/* The convention here is to make the first fields in the
* TP_STRUCT match the TP_PROTO exactly . This enables the use
* of the args struct generated by the tplist tool ( from the
* bcc - tools package ) to be used for those fields . To access
* fields other than the tracepoint args will require the
* tplist output to be adjusted .
*/
TP_STRUCT__entry (
__field ( void * , ring )
__field ( void * , desc )
__field ( void * , buf )
__string ( devname , ring - > netdev - > name )
) ,
TP_fast_assign (
__entry - > ring = ring ;
__entry - > desc = desc ;
__entry - > buf = buf ;
__assign_str ( devname , ring - > netdev - > name ) ;
) ,
TP_printk (
" netdev: %s ring: %p desc: %p buf %p " ,
__get_str ( devname ) , __entry - > ring ,
__entry - > desc , __entry - > buf )
) ;
DEFINE_EVENT (
i40e_tx_template , i40e_clean_tx_irq ,
TP_PROTO ( struct i40e_ring * ring ,
struct i40e_tx_desc * desc ,
struct i40e_tx_buffer * buf ) ,
TP_ARGS ( ring , desc , buf ) ) ;
DEFINE_EVENT (
i40e_tx_template , i40e_clean_tx_irq_unmap ,
TP_PROTO ( struct i40e_ring * ring ,
struct i40e_tx_desc * desc ,
struct i40e_tx_buffer * buf ) ,
TP_ARGS ( ring , desc , buf ) ) ;
DECLARE_EVENT_CLASS (
i40e_rx_template ,
TP_PROTO ( struct i40e_ring * ring ,
2020-08-25 13:35:55 +02:00
union i40e_16byte_rx_desc * desc ,
2017-04-13 04:45:44 -04:00
struct sk_buff * skb ) ,
TP_ARGS ( ring , desc , skb ) ,
TP_STRUCT__entry (
__field ( void * , ring )
__field ( void * , desc )
__field ( void * , skb )
__string ( devname , ring - > netdev - > name )
) ,
TP_fast_assign (
__entry - > ring = ring ;
__entry - > desc = desc ;
__entry - > skb = skb ;
__assign_str ( devname , ring - > netdev - > name ) ;
) ,
TP_printk (
" netdev: %s ring: %p desc: %p skb %p " ,
__get_str ( devname ) , __entry - > ring ,
__entry - > desc , __entry - > skb )
) ;
DEFINE_EVENT (
i40e_rx_template , i40e_clean_rx_irq ,
TP_PROTO ( struct i40e_ring * ring ,
2020-08-25 13:35:55 +02:00
union i40e_16byte_rx_desc * desc ,
2017-04-13 04:45:44 -04:00
struct sk_buff * skb ) ,
TP_ARGS ( ring , desc , skb ) ) ;
DEFINE_EVENT (
i40e_rx_template , i40e_clean_rx_irq_rx ,
TP_PROTO ( struct i40e_ring * ring ,
2020-08-25 13:35:55 +02:00
union i40e_16byte_rx_desc * desc ,
2017-04-13 04:45:44 -04:00
struct sk_buff * skb ) ,
TP_ARGS ( ring , desc , skb ) ) ;
DECLARE_EVENT_CLASS (
i40e_xmit_template ,
TP_PROTO ( struct sk_buff * skb ,
struct i40e_ring * ring ) ,
TP_ARGS ( skb , ring ) ,
TP_STRUCT__entry (
__field ( void * , skb )
__field ( void * , ring )
__string ( devname , ring - > netdev - > name )
) ,
TP_fast_assign (
__entry - > skb = skb ;
__entry - > ring = ring ;
__assign_str ( devname , ring - > netdev - > name ) ;
) ,
TP_printk (
" netdev: %s skb: %p ring: %p " ,
__get_str ( devname ) , __entry - > skb ,
__entry - > ring )
) ;
DEFINE_EVENT (
i40e_xmit_template , i40e_xmit_frame_ring ,
TP_PROTO ( struct sk_buff * skb ,
struct i40e_ring * ring ) ,
TP_ARGS ( skb , ring ) ) ;
DEFINE_EVENT (
i40e_xmit_template , i40e_xmit_frame_ring_drop ,
TP_PROTO ( struct sk_buff * skb ,
struct i40e_ring * ring ) ,
TP_ARGS ( skb , ring ) ) ;
/* Events unique to the PF. */
# endif /* _I40E_TRACE_H_ */
/* This must be outside ifdef _I40E_TRACE_H */
/* This trace include file is not located in the .../include/trace
* with the kernel tracepoint definitions , because we ' re a loadable
* module .
*/
# undef TRACE_INCLUDE_PATH
# define TRACE_INCLUDE_PATH .
# undef TRACE_INCLUDE_FILE
# define TRACE_INCLUDE_FILE i40e_trace
# include <trace/define_trace.h>