wil6210: use GRO
authorVladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Mon, 17 Mar 2014 13:34:22 +0000 (15:34 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 17 Mar 2014 17:44:18 +0000 (13:44 -0400)
GRO is easy to enable when already using NAPI framework,
and it improves CPU utilisation. Enable it by default.

Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/wil6210/netdev.c
drivers/net/wireless/ath/wil6210/txrx.c

index 5991802a6701f2a7d467003f6c4b49815c08e2e5..fdcaeb820e75857469ab4d0a6d854cdb4d6aa373 100644 (file)
@@ -128,7 +128,7 @@ void *wil_if_alloc(struct device *dev, void __iomem *csr)
        ndev->netdev_ops = &wil_netdev_ops;
        ndev->ieee80211_ptr = wdev;
        ndev->hw_features = NETIF_F_HW_CSUM | NETIF_F_RXCSUM |
-                           NETIF_F_SG;
+                           NETIF_F_SG | NETIF_F_GRO;
        ndev->features |= ndev->hw_features;
        SET_NETDEV_DEV(ndev, wiphy_dev(wdev->wiphy));
        wdev->netdev = ndev;
index 97d036adb3821dc930483f275aafe4246521d8e3..cfd36cc0336b5f6ab14efc8b0f630db51bc4e995 100644 (file)
@@ -488,7 +488,7 @@ static int wil_rx_refill(struct wil6210_priv *wil, int count)
  */
 void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev)
 {
-       int rc;
+       gro_result_t rc;
        struct wil6210_priv *wil = ndev_to_wil(ndev);
        unsigned int len = skb->len;
        struct vring_rx_desc *d = wil_skb_rxdesc(skb);
@@ -497,17 +497,17 @@ void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev)
 
        skb_orphan(skb);
 
-       rc = netif_receive_skb(skb);
+       rc = napi_gro_receive(&wil->napi_rx, skb);
 
-       if (likely(rc == NET_RX_SUCCESS)) {
+       if (unlikely(rc == GRO_DROP)) {
+               ndev->stats.rx_dropped++;
+               stats->rx_dropped++;
+               wil_dbg_txrx(wil, "Rx drop %d bytes\n", len);
+       } else {
                ndev->stats.rx_packets++;
                stats->rx_packets++;
                ndev->stats.rx_bytes += len;
                stats->rx_bytes += len;
-
-       } else {
-               ndev->stats.rx_dropped++;
-               stats->rx_dropped++;
        }
 }