dpaa2-eth: use netif_receive_skb_list
authorIoana Ciornei <ioana.ciornei@nxp.com>
Mon, 25 Mar 2019 13:42:39 +0000 (13:42 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 26 Mar 2019 18:46:59 +0000 (11:46 -0700)
Take advantage of the software Rx batching by using
netif_receive_skb_list instead of napi_gro_receive.

Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h

index 2ba49e959c3fd391115740988ae44b3c0698b4d5..e923e5cecc4e11147ca9a3a6104fb2f380f5b2ab 100644 (file)
@@ -435,7 +435,7 @@ static void dpaa2_eth_rx(struct dpaa2_eth_priv *priv,
        percpu_stats->rx_packets++;
        percpu_stats->rx_bytes += dpaa2_fd_get_len(fd);
 
-       napi_gro_receive(&ch->napi, skb);
+       list_add_tail(&skb->list, ch->rx_list);
 
        return;
 
@@ -1108,12 +1108,16 @@ static int dpaa2_eth_poll(struct napi_struct *napi, int budget)
        struct dpaa2_eth_fq *fq, *txc_fq = NULL;
        struct netdev_queue *nq;
        int store_cleaned, work_done;
+       struct list_head rx_list;
        int err;
 
        ch = container_of(napi, struct dpaa2_eth_channel, napi);
        ch->xdp.res = 0;
        priv = ch->priv;
 
+       INIT_LIST_HEAD(&rx_list);
+       ch->rx_list = &rx_list;
+
        do {
                err = pull_channel(ch);
                if (unlikely(err))
@@ -1157,6 +1161,8 @@ static int dpaa2_eth_poll(struct napi_struct *napi, int budget)
        work_done = max(rx_cleaned, 1);
 
 out:
+       netif_receive_skb_list(ch->rx_list);
+
        if (txc_fq && txc_fq->dq_frames) {
                nq = netdev_get_tx_queue(priv->net_dev, txc_fq->flowid);
                netdev_tx_completed_queue(nq, txc_fq->dq_frames,
index 7879622aa3e6d8bdf348dc639235d5ca132afe74..a11ebfdc4a2329e169bd6a7978aa5b1c4413d597 100644 (file)
@@ -334,6 +334,7 @@ struct dpaa2_eth_channel {
        struct dpaa2_eth_ch_stats stats;
        struct dpaa2_eth_ch_xdp xdp;
        struct xdp_rxq_info xdp_rxq;
+       struct list_head *rx_list;
 };
 
 struct dpaa2_eth_dist_fields {