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 <bro...@redhat.com>
Signed-off-by: Jesper Dangaard Brouer <bro...@redhat.com>
Signed-off-by: Lorenzo Bianconi <lore...@kernel.org>
---
 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

Reply via email to