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 <baruch@tkos.co.il> Acked-by: Ciara Loftus <ciara.loftus@intel.com>
This commit is contained in:
parent
a550baf24a
commit
0f2ffb49ce
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user