From: Baruch Siach Date: Wed, 25 Aug 2021 10:05:44 +0000 (+0300) Subject: net/af_xdp: fix zero-copy Tx queue drain X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=0f2ffb49ce29351fad043377a6d2f144f3c52afb;p=dpdk.git net/af_xdp: fix zero-copy Tx queue drain Call xsk_ring_prod__submit() before kick_tx() so that the kernel consumer sees the updated state of Tx ring. Otherwise, Tx packets are stuck in the ring until the next call to af_xdp_tx_zc(). Fixes: d8a210774e1d ("net/af_xdp: support unaligned umem chunks") Cc: stable@dpdk.org Signed-off-by: Baruch Siach Acked-by: Ciara Loftus --- diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c index 74ffa45112..9bea0a895a 100644 --- a/drivers/net/af_xdp/rte_eth_af_xdp.c +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c @@ -527,7 +527,6 @@ af_xdp_tx_zc(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) if (!xsk_ring_prod__reserve(&txq->tx, 1, &idx_tx)) { rte_pktmbuf_free(local_mbuf); - kick_tx(txq, cq); goto out; } @@ -551,10 +550,9 @@ af_xdp_tx_zc(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) tx_bytes += mbuf->pkt_len; } - kick_tx(txq, cq); - out: xsk_ring_prod__submit(&txq->tx, count); + kick_tx(txq, cq); txq->stats.tx_pkts += count; txq->stats.tx_bytes += tx_bytes;