13089cf6dSJesse Brandeburg /* SPDX-License-Identifier: GPL-2.0 */ 23089cf6dSJesse Brandeburg /* Copyright (C) 2021 Intel Corporation. */ 33089cf6dSJesse Brandeburg 43089cf6dSJesse Brandeburg /* Modeled on trace-events-sample.h */ 53089cf6dSJesse Brandeburg 63089cf6dSJesse Brandeburg /* The trace subsystem name for ice will be "ice". 73089cf6dSJesse Brandeburg * 83089cf6dSJesse Brandeburg * This file is named ice_trace.h. 93089cf6dSJesse Brandeburg * 103089cf6dSJesse Brandeburg * Since this include file's name is different from the trace 113089cf6dSJesse Brandeburg * subsystem name, we'll have to define TRACE_INCLUDE_FILE at the end 123089cf6dSJesse Brandeburg * of this file. 133089cf6dSJesse Brandeburg */ 143089cf6dSJesse Brandeburg #undef TRACE_SYSTEM 153089cf6dSJesse Brandeburg #define TRACE_SYSTEM ice 163089cf6dSJesse Brandeburg 173089cf6dSJesse Brandeburg /* See trace-events-sample.h for a detailed description of why this 183089cf6dSJesse Brandeburg * guard clause is different from most normal include files. 193089cf6dSJesse Brandeburg */ 203089cf6dSJesse Brandeburg #if !defined(_ICE_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 213089cf6dSJesse Brandeburg #define _ICE_TRACE_H_ 223089cf6dSJesse Brandeburg 233089cf6dSJesse Brandeburg #include <linux/tracepoint.h> 243089cf6dSJesse Brandeburg 253089cf6dSJesse Brandeburg /* ice_trace() macro enables shared code to refer to trace points 263089cf6dSJesse Brandeburg * like: 273089cf6dSJesse Brandeburg * 283089cf6dSJesse Brandeburg * trace_ice_example(args...) 293089cf6dSJesse Brandeburg * 303089cf6dSJesse Brandeburg * ... as: 313089cf6dSJesse Brandeburg * 323089cf6dSJesse Brandeburg * ice_trace(example, args...) 333089cf6dSJesse Brandeburg * 343089cf6dSJesse Brandeburg * ... to resolve to the PF version of the tracepoint without 353089cf6dSJesse Brandeburg * ifdefs, and to allow tracepoints to be disabled entirely at build 363089cf6dSJesse Brandeburg * time. 373089cf6dSJesse Brandeburg * 383089cf6dSJesse Brandeburg * Trace point should always be referred to in the driver via this 393089cf6dSJesse Brandeburg * macro. 403089cf6dSJesse Brandeburg * 413089cf6dSJesse Brandeburg * Similarly, ice_trace_enabled(trace_name) wraps references to 423089cf6dSJesse Brandeburg * trace_ice_<trace_name>_enabled() functions. 433089cf6dSJesse Brandeburg * @trace_name: name of tracepoint 443089cf6dSJesse Brandeburg */ 453089cf6dSJesse Brandeburg #define _ICE_TRACE_NAME(trace_name) (trace_##ice##_##trace_name) 463089cf6dSJesse Brandeburg #define ICE_TRACE_NAME(trace_name) _ICE_TRACE_NAME(trace_name) 473089cf6dSJesse Brandeburg 483089cf6dSJesse Brandeburg #define ice_trace(trace_name, args...) ICE_TRACE_NAME(trace_name)(args) 493089cf6dSJesse Brandeburg 503089cf6dSJesse Brandeburg #define ice_trace_enabled(trace_name) ICE_TRACE_NAME(trace_name##_enabled)() 513089cf6dSJesse Brandeburg 523089cf6dSJesse Brandeburg /* This is for events common to PF. Corresponding versions will be named 533089cf6dSJesse Brandeburg * trace_ice_*. The ice_trace() macro above will select the right trace point 543089cf6dSJesse Brandeburg * name for the driver. 553089cf6dSJesse Brandeburg */ 563089cf6dSJesse Brandeburg 573089cf6dSJesse Brandeburg /* Begin tracepoints */ 583089cf6dSJesse Brandeburg 593089cf6dSJesse Brandeburg /* Global tracepoints */ 603089cf6dSJesse Brandeburg 613089cf6dSJesse Brandeburg /* Events related to DIM, q_vectors and ring containers */ 623089cf6dSJesse Brandeburg DECLARE_EVENT_CLASS(ice_rx_dim_template, 633089cf6dSJesse Brandeburg TP_PROTO(struct ice_q_vector *q_vector, struct dim *dim), 643089cf6dSJesse Brandeburg TP_ARGS(q_vector, dim), 653089cf6dSJesse Brandeburg TP_STRUCT__entry(__field(struct ice_q_vector *, q_vector) 663089cf6dSJesse Brandeburg __field(struct dim *, dim) 67*e72bba21SMaciej Fijalkowski __string(devname, q_vector->rx.rx_ring->netdev->name)), 683089cf6dSJesse Brandeburg 693089cf6dSJesse Brandeburg TP_fast_assign(__entry->q_vector = q_vector; 703089cf6dSJesse Brandeburg __entry->dim = dim; 71*e72bba21SMaciej Fijalkowski __assign_str(devname, q_vector->rx.rx_ring->netdev->name);), 723089cf6dSJesse Brandeburg 733089cf6dSJesse Brandeburg TP_printk("netdev: %s Rx-Q: %d dim-state: %d dim-profile: %d dim-tune: %d dim-st-right: %d dim-st-left: %d dim-tired: %d", 743089cf6dSJesse Brandeburg __get_str(devname), 75*e72bba21SMaciej Fijalkowski __entry->q_vector->rx.rx_ring->q_index, 763089cf6dSJesse Brandeburg __entry->dim->state, 773089cf6dSJesse Brandeburg __entry->dim->profile_ix, 783089cf6dSJesse Brandeburg __entry->dim->tune_state, 793089cf6dSJesse Brandeburg __entry->dim->steps_right, 803089cf6dSJesse Brandeburg __entry->dim->steps_left, 813089cf6dSJesse Brandeburg __entry->dim->tired) 823089cf6dSJesse Brandeburg ); 833089cf6dSJesse Brandeburg 843089cf6dSJesse Brandeburg DEFINE_EVENT(ice_rx_dim_template, ice_rx_dim_work, 853089cf6dSJesse Brandeburg TP_PROTO(struct ice_q_vector *q_vector, struct dim *dim), 863089cf6dSJesse Brandeburg TP_ARGS(q_vector, dim) 873089cf6dSJesse Brandeburg ); 883089cf6dSJesse Brandeburg 893089cf6dSJesse Brandeburg DECLARE_EVENT_CLASS(ice_tx_dim_template, 903089cf6dSJesse Brandeburg TP_PROTO(struct ice_q_vector *q_vector, struct dim *dim), 913089cf6dSJesse Brandeburg TP_ARGS(q_vector, dim), 923089cf6dSJesse Brandeburg TP_STRUCT__entry(__field(struct ice_q_vector *, q_vector) 933089cf6dSJesse Brandeburg __field(struct dim *, dim) 94*e72bba21SMaciej Fijalkowski __string(devname, q_vector->tx.tx_ring->netdev->name)), 953089cf6dSJesse Brandeburg 963089cf6dSJesse Brandeburg TP_fast_assign(__entry->q_vector = q_vector; 973089cf6dSJesse Brandeburg __entry->dim = dim; 98*e72bba21SMaciej Fijalkowski __assign_str(devname, q_vector->tx.tx_ring->netdev->name);), 993089cf6dSJesse Brandeburg 1003089cf6dSJesse Brandeburg TP_printk("netdev: %s Tx-Q: %d dim-state: %d dim-profile: %d dim-tune: %d dim-st-right: %d dim-st-left: %d dim-tired: %d", 1013089cf6dSJesse Brandeburg __get_str(devname), 102*e72bba21SMaciej Fijalkowski __entry->q_vector->tx.tx_ring->q_index, 1033089cf6dSJesse Brandeburg __entry->dim->state, 1043089cf6dSJesse Brandeburg __entry->dim->profile_ix, 1053089cf6dSJesse Brandeburg __entry->dim->tune_state, 1063089cf6dSJesse Brandeburg __entry->dim->steps_right, 1073089cf6dSJesse Brandeburg __entry->dim->steps_left, 1083089cf6dSJesse Brandeburg __entry->dim->tired) 1093089cf6dSJesse Brandeburg ); 1103089cf6dSJesse Brandeburg 1113089cf6dSJesse Brandeburg DEFINE_EVENT(ice_tx_dim_template, ice_tx_dim_work, 1123089cf6dSJesse Brandeburg TP_PROTO(struct ice_q_vector *q_vector, struct dim *dim), 1133089cf6dSJesse Brandeburg TP_ARGS(q_vector, dim) 1143089cf6dSJesse Brandeburg ); 1153089cf6dSJesse Brandeburg 1163089cf6dSJesse Brandeburg /* Events related to a vsi & ring */ 1173089cf6dSJesse Brandeburg DECLARE_EVENT_CLASS(ice_tx_template, 118*e72bba21SMaciej Fijalkowski TP_PROTO(struct ice_tx_ring *ring, struct ice_tx_desc *desc, 1193089cf6dSJesse Brandeburg struct ice_tx_buf *buf), 1203089cf6dSJesse Brandeburg 1213089cf6dSJesse Brandeburg TP_ARGS(ring, desc, buf), 1223089cf6dSJesse Brandeburg TP_STRUCT__entry(__field(void *, ring) 1233089cf6dSJesse Brandeburg __field(void *, desc) 1243089cf6dSJesse Brandeburg __field(void *, buf) 1253089cf6dSJesse Brandeburg __string(devname, ring->netdev->name)), 1263089cf6dSJesse Brandeburg 1273089cf6dSJesse Brandeburg TP_fast_assign(__entry->ring = ring; 1283089cf6dSJesse Brandeburg __entry->desc = desc; 1293089cf6dSJesse Brandeburg __entry->buf = buf; 1303089cf6dSJesse Brandeburg __assign_str(devname, ring->netdev->name);), 1313089cf6dSJesse Brandeburg 1323089cf6dSJesse Brandeburg TP_printk("netdev: %s ring: %pK desc: %pK buf %pK", __get_str(devname), 1333089cf6dSJesse Brandeburg __entry->ring, __entry->desc, __entry->buf) 1343089cf6dSJesse Brandeburg ); 1353089cf6dSJesse Brandeburg 1363089cf6dSJesse Brandeburg #define DEFINE_TX_TEMPLATE_OP_EVENT(name) \ 1373089cf6dSJesse Brandeburg DEFINE_EVENT(ice_tx_template, name, \ 138*e72bba21SMaciej Fijalkowski TP_PROTO(struct ice_tx_ring *ring, \ 1393089cf6dSJesse Brandeburg struct ice_tx_desc *desc, \ 1403089cf6dSJesse Brandeburg struct ice_tx_buf *buf), \ 1413089cf6dSJesse Brandeburg TP_ARGS(ring, desc, buf)) 1423089cf6dSJesse Brandeburg 1433089cf6dSJesse Brandeburg DEFINE_TX_TEMPLATE_OP_EVENT(ice_clean_tx_irq); 1443089cf6dSJesse Brandeburg DEFINE_TX_TEMPLATE_OP_EVENT(ice_clean_tx_irq_unmap); 1453089cf6dSJesse Brandeburg DEFINE_TX_TEMPLATE_OP_EVENT(ice_clean_tx_irq_unmap_eop); 1463089cf6dSJesse Brandeburg 1473089cf6dSJesse Brandeburg DECLARE_EVENT_CLASS(ice_rx_template, 148*e72bba21SMaciej Fijalkowski TP_PROTO(struct ice_rx_ring *ring, union ice_32b_rx_flex_desc *desc), 1493089cf6dSJesse Brandeburg 1503089cf6dSJesse Brandeburg TP_ARGS(ring, desc), 1513089cf6dSJesse Brandeburg 1523089cf6dSJesse Brandeburg TP_STRUCT__entry(__field(void *, ring) 1533089cf6dSJesse Brandeburg __field(void *, desc) 1543089cf6dSJesse Brandeburg __string(devname, ring->netdev->name)), 1553089cf6dSJesse Brandeburg 1563089cf6dSJesse Brandeburg TP_fast_assign(__entry->ring = ring; 1573089cf6dSJesse Brandeburg __entry->desc = desc; 1583089cf6dSJesse Brandeburg __assign_str(devname, ring->netdev->name);), 1593089cf6dSJesse Brandeburg 1603089cf6dSJesse Brandeburg TP_printk("netdev: %s ring: %pK desc: %pK", __get_str(devname), 1613089cf6dSJesse Brandeburg __entry->ring, __entry->desc) 1623089cf6dSJesse Brandeburg ); 1633089cf6dSJesse Brandeburg DEFINE_EVENT(ice_rx_template, ice_clean_rx_irq, 164*e72bba21SMaciej Fijalkowski TP_PROTO(struct ice_rx_ring *ring, union ice_32b_rx_flex_desc *desc), 1653089cf6dSJesse Brandeburg TP_ARGS(ring, desc) 1663089cf6dSJesse Brandeburg ); 1673089cf6dSJesse Brandeburg 1683089cf6dSJesse Brandeburg DECLARE_EVENT_CLASS(ice_rx_indicate_template, 169*e72bba21SMaciej Fijalkowski TP_PROTO(struct ice_rx_ring *ring, union ice_32b_rx_flex_desc *desc, 1703089cf6dSJesse Brandeburg struct sk_buff *skb), 1713089cf6dSJesse Brandeburg 1723089cf6dSJesse Brandeburg TP_ARGS(ring, desc, skb), 1733089cf6dSJesse Brandeburg 1743089cf6dSJesse Brandeburg TP_STRUCT__entry(__field(void *, ring) 1753089cf6dSJesse Brandeburg __field(void *, desc) 1763089cf6dSJesse Brandeburg __field(void *, skb) 1773089cf6dSJesse Brandeburg __string(devname, ring->netdev->name)), 1783089cf6dSJesse Brandeburg 1793089cf6dSJesse Brandeburg TP_fast_assign(__entry->ring = ring; 1803089cf6dSJesse Brandeburg __entry->desc = desc; 1813089cf6dSJesse Brandeburg __entry->skb = skb; 1823089cf6dSJesse Brandeburg __assign_str(devname, ring->netdev->name);), 1833089cf6dSJesse Brandeburg 1843089cf6dSJesse Brandeburg TP_printk("netdev: %s ring: %pK desc: %pK skb %pK", __get_str(devname), 1853089cf6dSJesse Brandeburg __entry->ring, __entry->desc, __entry->skb) 1863089cf6dSJesse Brandeburg ); 1873089cf6dSJesse Brandeburg 1883089cf6dSJesse Brandeburg DEFINE_EVENT(ice_rx_indicate_template, ice_clean_rx_irq_indicate, 189*e72bba21SMaciej Fijalkowski TP_PROTO(struct ice_rx_ring *ring, union ice_32b_rx_flex_desc *desc, 1903089cf6dSJesse Brandeburg struct sk_buff *skb), 1913089cf6dSJesse Brandeburg TP_ARGS(ring, desc, skb) 1923089cf6dSJesse Brandeburg ); 1933089cf6dSJesse Brandeburg 1943089cf6dSJesse Brandeburg DECLARE_EVENT_CLASS(ice_xmit_template, 195*e72bba21SMaciej Fijalkowski TP_PROTO(struct ice_tx_ring *ring, struct sk_buff *skb), 1963089cf6dSJesse Brandeburg 1973089cf6dSJesse Brandeburg TP_ARGS(ring, skb), 1983089cf6dSJesse Brandeburg 1993089cf6dSJesse Brandeburg TP_STRUCT__entry(__field(void *, ring) 2003089cf6dSJesse Brandeburg __field(void *, skb) 2013089cf6dSJesse Brandeburg __string(devname, ring->netdev->name)), 2023089cf6dSJesse Brandeburg 2033089cf6dSJesse Brandeburg TP_fast_assign(__entry->ring = ring; 2043089cf6dSJesse Brandeburg __entry->skb = skb; 2053089cf6dSJesse Brandeburg __assign_str(devname, ring->netdev->name);), 2063089cf6dSJesse Brandeburg 2073089cf6dSJesse Brandeburg TP_printk("netdev: %s skb: %pK ring: %pK", __get_str(devname), 2083089cf6dSJesse Brandeburg __entry->skb, __entry->ring) 2093089cf6dSJesse Brandeburg ); 2103089cf6dSJesse Brandeburg 2113089cf6dSJesse Brandeburg #define DEFINE_XMIT_TEMPLATE_OP_EVENT(name) \ 2123089cf6dSJesse Brandeburg DEFINE_EVENT(ice_xmit_template, name, \ 213*e72bba21SMaciej Fijalkowski TP_PROTO(struct ice_tx_ring *ring, struct sk_buff *skb), \ 2143089cf6dSJesse Brandeburg TP_ARGS(ring, skb)) 2153089cf6dSJesse Brandeburg 2163089cf6dSJesse Brandeburg DEFINE_XMIT_TEMPLATE_OP_EVENT(ice_xmit_frame_ring); 2173089cf6dSJesse Brandeburg DEFINE_XMIT_TEMPLATE_OP_EVENT(ice_xmit_frame_ring_drop); 2183089cf6dSJesse Brandeburg 2193089cf6dSJesse Brandeburg /* End tracepoints */ 2203089cf6dSJesse Brandeburg 2213089cf6dSJesse Brandeburg #endif /* _ICE_TRACE_H_ */ 2223089cf6dSJesse Brandeburg /* This must be outside ifdef _ICE_TRACE_H */ 2233089cf6dSJesse Brandeburg 2243089cf6dSJesse Brandeburg /* This trace include file is not located in the .../include/trace 2253089cf6dSJesse Brandeburg * with the kernel tracepoint definitions, because we're a loadable 2263089cf6dSJesse Brandeburg * module. 2273089cf6dSJesse Brandeburg */ 2283089cf6dSJesse Brandeburg #undef TRACE_INCLUDE_PATH 2293089cf6dSJesse Brandeburg #define TRACE_INCLUDE_PATH . 2303089cf6dSJesse Brandeburg #undef TRACE_INCLUDE_FILE 2313089cf6dSJesse Brandeburg #define TRACE_INCLUDE_FILE ../../drivers/net/ethernet/intel/ice/ice_trace 2323089cf6dSJesse Brandeburg #include <trace/define_trace.h> 233