From: Stephen Hemminger Date: Tue, 31 Mar 2020 17:14:02 +0000 (-0700) Subject: net/netvsc: handle Tx completions based on burst size X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=56edef9906558c69a1440173a5a3aac8f8f8710f;p=dpdk.git net/netvsc: handle Tx completions based on burst size 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 --- diff --git a/drivers/net/netvsc/hn_rxtx.c b/drivers/net/netvsc/hn_rxtx.c index e8df846042..cbdfcc628b 100644 --- a/drivers/net/netvsc/hn_rxtx.c +++ b/drivers/net/netvsc/hn_rxtx.c @@ -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++) {