net/netvsc: handle Tx completions based on burst size
authorStephen Hemminger <stephen@networkplumber.org>
Tue, 31 Mar 2020 17:14:02 +0000 (10:14 -0700)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 21 Apr 2020 11:57:06 +0000 (13:57 +0200)
If tx_free_thresh is quite low, it is possible that we need to
cleanup based on burst size.

Fixes: fc30efe3a22e ("net/netvsc: change Rx descriptor setup and sizing")
Cc: stable@dpdk.org
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
drivers/net/netvsc/hn_rxtx.c

index e8df846..cbdfcc6 100644 (file)
@@ -1375,7 +1375,7 @@ hn_xmit_pkts(void *ptxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
        struct hn_data *hv = txq->hv;
        struct rte_eth_dev *vf_dev;
        bool need_sig = false;
-       uint16_t nb_tx;
+       uint16_t nb_tx, avail;
        int ret;
 
        if (unlikely(hv->closed))
@@ -1390,7 +1390,8 @@ hn_xmit_pkts(void *ptxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
                return (*vf_dev->tx_pkt_burst)(sub_q, tx_pkts, nb_pkts);
        }
 
-       if (rte_mempool_avail_count(txq->txdesc_pool) <= txq->free_thresh)
+       avail = rte_mempool_avail_count(txq->txdesc_pool);
+       if (nb_pkts > avail || avail <= txq->free_thresh)
                hn_process_events(hv, txq->queue_id, 0);
 
        for (nb_tx = 0; nb_tx < nb_pkts; nb_tx++) {