Count the number of entries in the Rx queue for debugging.

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

Signed-off-by: Pankaj Gupta <pagu...@vmware.com>
Reviewed-by: Jochen Behrens <jbehr...@vmware.com>
---
 drivers/net/vmxnet3/vmxnet3_ethdev.c |  1 +
 drivers/net/vmxnet3/vmxnet3_ethdev.h |  3 +++
 drivers/net/vmxnet3/vmxnet3_rxtx.c   | 30 ++++++++++++++++++++++++++++
 3 files changed, 34 insertions(+)

diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c 
b/drivers/net/vmxnet3/vmxnet3_ethdev.c
index d5f9903946..2725e49ae9 100644
--- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
@@ -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 */
diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.h 
b/drivers/net/vmxnet3/vmxnet3_ethdev.h
index 7ec3b2e1f0..ceaeb66392 100644
--- a/drivers/net/vmxnet3/vmxnet3_ethdev.h
+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.h
@@ -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);
diff --git a/drivers/net/vmxnet3/vmxnet3_rxtx.c 
b/drivers/net/vmxnet3/vmxnet3_rxtx.c
index d745064bc4..e15b377d8c 100644
--- a/drivers/net/vmxnet3/vmxnet3_rxtx.c
+++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c
@@ -1019,6 +1019,36 @@ vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf 
**rx_pkts, uint16_t nb_pkts)
        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,
-- 
2.17.1

Reply via email to