examples/dma: fix Tx drop statistics
authorChengwen Feng <fengchengwen@huawei.com>
Sun, 24 Apr 2022 06:07:40 +0000 (14:07 +0800)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 6 Jun 2022 21:31:33 +0000 (23:31 +0200)
The Tx drop statistic was designed to be collected by
rte_eth_dev_tx_buffer mechanism, but the application uses
rte_eth_tx_burst to send packets and this lead the Tx drop statistic
was not collected.

This patch removes rte_eth_dev_tx_buffer mechanism to fix the problem.

Fixes: 632bcd9b5d4f ("examples/ioat: print statistics")
Cc: stable@dpdk.org
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Kevin Laatz <kevin.laatz@intel.com>
examples/dma/dmafwd.c

index a03ca05..dd576bc 100644 (file)
@@ -122,7 +122,6 @@ static uint32_t max_frame_size;
 /* ethernet addresses of ports */
 static struct rte_ether_addr dma_ports_eth_addr[RTE_MAX_ETHPORTS];
 
-static struct rte_eth_dev_tx_buffer *tx_buffer[RTE_MAX_ETHPORTS];
 struct rte_mempool *dma_pktmbuf_pool;
 
 /* Print out statistics for one port. */
@@ -484,10 +483,13 @@ dma_tx_port(struct rxtx_port_config *tx_config)
 
                port_statistics.tx[tx_config->rxtx_port] += nb_tx;
 
-               /* Free any unsent packets. */
-               if (unlikely(nb_tx < nb_dq))
+               if (unlikely(nb_tx < nb_dq)) {
+                       port_statistics.tx_dropped[tx_config->rxtx_port] +=
+                               (nb_dq - nb_tx);
+                       /* Free any unsent packets. */
                        rte_mempool_put_bulk(dma_pktmbuf_pool,
                        (void *)&mbufs[nb_tx], nb_dq - nb_tx);
+               }
        }
 }
 /* >8 End of transmitting packets from dmadev. */
@@ -970,25 +972,6 @@ port_init(uint16_t portid, struct rte_mempool *mbuf_pool, uint16_t nb_queues)
                        "rte_eth_tx_queue_setup:err=%d,port=%u\n",
                        ret, portid);
 
-       /* Initialize TX buffers */
-       tx_buffer[portid] = rte_zmalloc_socket("tx_buffer",
-                       RTE_ETH_TX_BUFFER_SIZE(MAX_PKT_BURST), 0,
-                       rte_eth_dev_socket_id(portid));
-       if (tx_buffer[portid] == NULL)
-               rte_exit(EXIT_FAILURE,
-                       "Cannot allocate buffer for tx on port %u\n",
-                       portid);
-
-       rte_eth_tx_buffer_init(tx_buffer[portid], MAX_PKT_BURST);
-
-       ret = rte_eth_tx_buffer_set_err_callback(tx_buffer[portid],
-               rte_eth_tx_buffer_count_callback,
-               &port_statistics.tx_dropped[portid]);
-       if (ret < 0)
-               rte_exit(EXIT_FAILURE,
-                       "Cannot set error callback for tx buffer on port %u\n",
-                       portid);
-
        /* Start device. 8< */
        ret = rte_eth_dev_start(portid);
        if (ret < 0)