> > 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: sta...@dpdk.org > > Signed-off-by: Baruch Siach <bar...@tkos.co.il>
Thanks for respinning. I tested it out and it looks good to me. Acked-by: Ciara Loftus <ciara.lof...@intel.com> > -- > v2: > > Don't call xsk_ring_prod__submit() when kick_tx() is only used to > drain the completion queue (Ciara Loftus) > --- > drivers/net/af_xdp/rte_eth_af_xdp.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c > b/drivers/net/af_xdp/rte_eth_af_xdp.c > index 74ffa4511284..9bea0a895a3e 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; > -- > 2.32.0