]> git.droids-corp.org - dpdk.git/commitdiff
net/vmxnet3: add Rx queue count
authorPankaj Gupta <pagupta@vmware.com>
Wed, 25 May 2022 00:40:22 +0000 (17:40 -0700)
committerAndrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Tue, 31 May 2022 13:32:33 +0000 (15:32 +0200)
Count the number of entries in the Rx queue for debugging.

Tested, using testpmd, for different hardware versions on ESXi 7.0
Update 2.

Signed-off-by: Pankaj Gupta <pagupta@vmware.com>
Reviewed-by: Jochen Behrens <jbehrens@vmware.com>
drivers/net/vmxnet3/vmxnet3_ethdev.c
drivers/net/vmxnet3/vmxnet3_ethdev.h
drivers/net/vmxnet3/vmxnet3_rxtx.c

index d5f9903946f53c6188570db38204e4a712e3b850..cd32c1b4eeb565011d9c7ea5f548f5b1eb67ff29 100644 (file)
@@ -294,6 +294,7 @@ eth_vmxnet3_dev_init(struct rte_eth_dev *eth_dev)
        eth_dev->rx_pkt_burst = &vmxnet3_recv_pkts;
        eth_dev->tx_pkt_burst = &vmxnet3_xmit_pkts;
        eth_dev->tx_pkt_prepare = vmxnet3_prep_pkts;
+       eth_dev->rx_queue_count = vmxnet3_dev_rx_queue_count;
        pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
 
        /* extra mbuf field is required to guess MSS */
index 7ec3b2e1f02cecf1bcc6290bc83bf959f9cc75fb..ceaeb6639249eb049bd4093f490b92af359349ce 100644 (file)
@@ -193,6 +193,9 @@ int  vmxnet3_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id,
                                uint16_t nb_rx_desc, unsigned int socket_id,
                                const struct rte_eth_rxconf *rx_conf,
                                struct rte_mempool *mb_pool);
+
+uint32_t vmxnet3_dev_rx_queue_count(void *rx_queue);
+
 int  vmxnet3_dev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id,
                                uint16_t nb_tx_desc, unsigned int socket_id,
                                const struct rte_eth_txconf *tx_conf);
index d745064bc42c8f194d1f96c2b289a6a5a5fc3635..e15b377d8c31fb01a5bc21712f0a53177df503c5 100644 (file)
@@ -1019,6 +1019,36 @@ rcd_done:
        return nb_rx;
 }
 
+uint32_t
+vmxnet3_dev_rx_queue_count(void *rx_queue)
+{
+       const vmxnet3_rx_queue_t *rxq;
+       const Vmxnet3_RxCompDesc *rcd;
+       uint32_t idx, nb_rxd = 0;
+       uint8_t gen;
+
+       rxq = rx_queue;
+       if (unlikely(rxq->stopped)) {
+               PMD_RX_LOG(DEBUG, "Rx queue is stopped.");
+               return 0;
+       }
+
+       gen = rxq->comp_ring.gen;
+       idx = rxq->comp_ring.next2proc;
+       rcd = &rxq->comp_ring.base[idx].rcd;
+       while (rcd->gen == gen) {
+               if (rcd->eop)
+                       ++nb_rxd;
+               if (++idx == rxq->comp_ring.size) {
+                       idx = 0;
+                       gen ^= 1;
+               }
+               rcd = &rxq->comp_ring.base[idx].rcd;
+       }
+
+       return nb_rxd;
+}
+
 int
 vmxnet3_dev_tx_queue_setup(struct rte_eth_dev *dev,
                           uint16_t queue_idx,