net: dpaa2-eth: add trace points on XSK events
authorRobert-Ionut Alexa <robert-ionut.alexa@nxp.com>
Tue, 18 Oct 2022 14:19:01 +0000 (17:19 +0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 24 Oct 2022 08:22:11 +0000 (09:22 +0100)
Define the dpaa2_tx_xsk_fd and dpaa2_rx_xsk_fd trace events for the XSK
zero-copy Rx and Tx path.  Also, define the dpaa2_eth_buf as an event
class so that both dpaa2_eth_buf_seed and dpaa2_xsk_buf_seed traces can
derive from the same class.

Signed-off-by: Robert-Ionut Alexa <robert-ionut.alexa@nxp.com>
Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-trace.h
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
drivers/net/ethernet/freescale/dpaa2/dpaa2-xsk.c

index 5fb5f14e01ec88df4bd0659a8aed6f91b87329a6..9b43fadb9b11b80be32f99a479a65a6748dae40e 100644 (file)
@@ -73,6 +73,14 @@ DEFINE_EVENT(dpaa2_eth_fd, dpaa2_tx_fd,
             TP_ARGS(netdev, fd)
 );
 
+/* Tx (egress) XSK fd */
+DEFINE_EVENT(dpaa2_eth_fd, dpaa2_tx_xsk_fd,
+            TP_PROTO(struct net_device *netdev,
+                     const struct dpaa2_fd *fd),
+
+            TP_ARGS(netdev, fd)
+);
+
 /* Rx fd */
 DEFINE_EVENT(dpaa2_eth_fd, dpaa2_rx_fd,
             TP_PROTO(struct net_device *netdev,
@@ -81,6 +89,14 @@ DEFINE_EVENT(dpaa2_eth_fd, dpaa2_rx_fd,
             TP_ARGS(netdev, fd)
 );
 
+/* Rx XSK fd */
+DEFINE_EVENT(dpaa2_eth_fd, dpaa2_rx_xsk_fd,
+            TP_PROTO(struct net_device *netdev,
+                     const struct dpaa2_fd *fd),
+
+            TP_ARGS(netdev, fd)
+);
+
 /* Tx confirmation fd */
 DEFINE_EVENT(dpaa2_eth_fd, dpaa2_tx_conf_fd,
             TP_PROTO(struct net_device *netdev,
@@ -90,57 +106,81 @@ DEFINE_EVENT(dpaa2_eth_fd, dpaa2_tx_conf_fd,
 );
 
 /* Log data about raw buffers. Useful for tracing DPBP content. */
-TRACE_EVENT(dpaa2_eth_buf_seed,
-           /* Trace function prototype */
-           TP_PROTO(struct net_device *netdev,
-                    /* virtual address and size */
-                    void *vaddr,
-                    size_t size,
-                    /* dma map address and size */
-                    dma_addr_t dma_addr,
-                    size_t map_size,
-                    /* buffer pool id, if relevant */
-                    u16 bpid),
-
-           /* Repeat argument list here */
-           TP_ARGS(netdev, vaddr, size, dma_addr, map_size, bpid),
-
-           /* A structure containing the relevant information we want
-            * to record. Declare name and type for each normal element,
-            * name, type and size for arrays. Use __string for variable
-            * length strings.
-            */
-           TP_STRUCT__entry(
-                            __field(void *, vaddr)
-                            __field(size_t, size)
-                            __field(dma_addr_t, dma_addr)
-                            __field(size_t, map_size)
-                            __field(u16, bpid)
-                            __string(name, netdev->name)
-           ),
-
-           /* The function that assigns values to the above declared
-            * fields
-            */
-           TP_fast_assign(
-                          __entry->vaddr = vaddr;
-                          __entry->size = size;
-                          __entry->dma_addr = dma_addr;
-                          __entry->map_size = map_size;
-                          __entry->bpid = bpid;
-                          __assign_str(name, netdev->name);
-           ),
-
-           /* This is what gets printed when the trace event is
-            * triggered.
-            */
-           TP_printk(TR_BUF_FMT,
-                     __get_str(name),
-                     __entry->vaddr,
-                     __entry->size,
-                     &__entry->dma_addr,
-                     __entry->map_size,
-                     __entry->bpid)
+DECLARE_EVENT_CLASS(dpaa2_eth_buf,
+                   /* Trace function prototype */
+                   TP_PROTO(struct net_device *netdev,
+                            /* virtual address and size */
+                           void *vaddr,
+                           size_t size,
+                           /* dma map address and size */
+                           dma_addr_t dma_addr,
+                           size_t map_size,
+                           /* buffer pool id, if relevant */
+                           u16 bpid),
+
+                   /* Repeat argument list here */
+                   TP_ARGS(netdev, vaddr, size, dma_addr, map_size, bpid),
+
+                   /* A structure containing the relevant information we want
+                    * to record. Declare name and type for each normal element,
+                    * name, type and size for arrays. Use __string for variable
+                    * length strings.
+                    */
+                   TP_STRUCT__entry(
+                                     __field(void *, vaddr)
+                                     __field(size_t, size)
+                                     __field(dma_addr_t, dma_addr)
+                                     __field(size_t, map_size)
+                                     __field(u16, bpid)
+                                     __string(name, netdev->name)
+                   ),
+
+                   /* The function that assigns values to the above declared
+                    * fields
+                    */
+                   TP_fast_assign(
+                                  __entry->vaddr = vaddr;
+                                  __entry->size = size;
+                                  __entry->dma_addr = dma_addr;
+                                  __entry->map_size = map_size;
+                                  __entry->bpid = bpid;
+                                  __assign_str(name, netdev->name);
+                   ),
+
+                   /* This is what gets printed when the trace event is
+                    * triggered.
+                    */
+                   TP_printk(TR_BUF_FMT,
+                             __get_str(name),
+                             __entry->vaddr,
+                             __entry->size,
+                             &__entry->dma_addr,
+                             __entry->map_size,
+                             __entry->bpid)
+);
+
+/* Main memory buff seeding */
+DEFINE_EVENT(dpaa2_eth_buf, dpaa2_eth_buf_seed,
+            TP_PROTO(struct net_device *netdev,
+                     void *vaddr,
+                     size_t size,
+                     dma_addr_t dma_addr,
+                     size_t map_size,
+                     u16 bpid),
+
+            TP_ARGS(netdev, vaddr, size, dma_addr, map_size, bpid)
+);
+
+/* UMEM buff seeding on AF_XDP fast path */
+DEFINE_EVENT(dpaa2_eth_buf, dpaa2_xsk_buf_seed,
+            TP_PROTO(struct net_device *netdev,
+                     void *vaddr,
+                     size_t size,
+                     dma_addr_t dma_addr,
+                     size_t map_size,
+                     u16 bpid),
+
+            TP_ARGS(netdev, vaddr, size, dma_addr, map_size, bpid)
 );
 
 /* If only one event of a certain type needs to be declared, use TRACE_EVENT().
index 31eebeae5d9583288f8932fb0cc5bec484c2eb19..281d7e3905c167b85b5d014dd9667d0ae759c07f 100644 (file)
@@ -1731,6 +1731,12 @@ static int dpaa2_eth_add_bufs(struct dpaa2_eth_priv *priv,
                                goto err_map;
 
                        buf_array[i] = addr;
+
+                       trace_dpaa2_xsk_buf_seed(priv->net_dev,
+                                                xdp_buffs[i]->data_hard_start,
+                                                DPAA2_ETH_RX_BUF_RAW_SIZE,
+                                                addr, priv->rx_buf_size,
+                                                ch->bp->bpid);
                }
        }
 
index 731318842054e93ac4663b7da1f18a9f98eb0d00..567f52affe21bd84a2ec3b9d0aaf6cedc1b7c79f 100644 (file)
@@ -113,6 +113,8 @@ static void dpaa2_xsk_rx(struct dpaa2_eth_priv *priv,
        void *vaddr;
        u32 xdp_act;
 
+       trace_dpaa2_rx_xsk_fd(priv->net_dev, fd);
+
        vaddr = dpaa2_iova_to_virt(priv->iommu_domain, addr);
        percpu_stats = this_cpu_ptr(priv->percpu_stats);
 
@@ -416,6 +418,8 @@ bool dpaa2_xsk_tx(struct dpaa2_eth_priv *priv,
                        batch = i;
                        break;
                }
+
+               trace_dpaa2_tx_xsk_fd(priv->net_dev, &fds[i]);
        }
 
        /* Enqueue all the created FDs */