Lorenzo Bianconi wrote: > Convert mvneta driver to xdp_return_frame_bulk APIs. > > XDP_REDIRECT (upstream codepath): 275Kpps > XDP_REDIRECT (upstream codepath + bulking APIs): 284Kpps > > Co-developed-by: Jesper Dangaard Brouer <brouer@xxxxxxxxxx> > Signed-off-by: Jesper Dangaard Brouer <brouer@xxxxxxxxxx> > Signed-off-by: Lorenzo Bianconi <lorenzo@xxxxxxxxxx> > --- > drivers/net/ethernet/marvell/mvneta.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c > index 54b0bf574c05..183530ed4d1d 100644 > --- a/drivers/net/ethernet/marvell/mvneta.c > +++ b/drivers/net/ethernet/marvell/mvneta.c > @@ -1834,8 +1834,13 @@ static void mvneta_txq_bufs_free(struct mvneta_port *pp, > struct netdev_queue *nq, bool napi) > { > unsigned int bytes_compl = 0, pkts_compl = 0; > + struct xdp_frame_bulk bq; > int i; > > + xdp_frame_bulk_init(&bq); > + > + rcu_read_lock(); /* need for xdp_return_frame_bulk */ > + > for (i = 0; i < num; i++) { > struct mvneta_tx_buf *buf = &txq->buf[txq->txq_get_index]; > struct mvneta_tx_desc *tx_desc = txq->descs + > @@ -1857,9 +1862,12 @@ static void mvneta_txq_bufs_free(struct mvneta_port *pp, > if (napi && buf->type == MVNETA_TYPE_XDP_TX) > xdp_return_frame_rx_napi(buf->xdpf); > else > - xdp_return_frame(buf->xdpf); > + xdp_return_frame_bulk(buf->xdpf, &bq); > } > } > + xdp_flush_frame_bulk(&bq); > + > + rcu_read_unlock(); > > netdev_tx_completed_queue(nq, pkts_compl, bytes_compl); > } > -- > 2.26.2 > Acked-by: John Fastabend <john.fastabend@xxxxxxxxx>