]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
mwifiex: uap: do not chok ethernet header in bridge path
authorXinming Hu <huxm@marvell.com>
Fri, 1 Jun 2018 07:53:40 +0000 (15:53 +0800)
committerKalle Valo <kvalo@codeaurora.org>
Wed, 27 Jun 2018 16:03:58 +0000 (19:03 +0300)
Do not chock ethernet header for uap bridge data path,
as it is still needed to send skb to dest station.

Signed-off-by: Xinming Hu <huxm@marvell.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/marvell/mwifiex/uap_txrx.c

index 1e6a62c69ac52bfb285a400d883287ca422f1998..5ce85d5727e4b882ebc37372f03bb49003d1a0c9 100644 (file)
@@ -289,32 +289,6 @@ int mwifiex_uap_recv_packet(struct mwifiex_private *priv,
                src_node->stats.rx_packets++;
        }
 
-       skb->dev = priv->netdev;
-       skb->protocol = eth_type_trans(skb, priv->netdev);
-       skb->ip_summed = CHECKSUM_NONE;
-
-       /* This is required only in case of 11n and USB/PCIE as we alloc
-        * a buffer of 4K only if its 11N (to be able to receive 4K
-        * AMSDU packets). In case of SD we allocate buffers based
-        * on the size of packet and hence this is not needed.
-        *
-        * Modifying the truesize here as our allocation for each
-        * skb is 4K but we only receive 2K packets and this cause
-        * the kernel to start dropping packets in case where
-        * application has allocated buffer based on 2K size i.e.
-        * if there a 64K packet received (in IP fragments and
-        * application allocates 64K to receive this packet but
-        * this packet would almost double up because we allocate
-        * each 1.5K fragment in 4K and pass it up. As soon as the
-        * 64K limit hits kernel will start to drop rest of the
-        * fragments. Currently we fail the Filesndl-ht.scr script
-        * for UDP, hence this fix
-        */
-       if ((adapter->iface_type == MWIFIEX_USB ||
-            adapter->iface_type == MWIFIEX_PCIE) &&
-           (skb->truesize > MWIFIEX_RX_DATA_BUF_SIZE))
-               skb->truesize += (skb->len - MWIFIEX_RX_DATA_BUF_SIZE);
-
        if (is_multicast_ether_addr(p_ethhdr->h_dest) ||
            mwifiex_get_sta_entry(priv, p_ethhdr->h_dest)) {
                if (skb_headroom(skb) < MWIFIEX_MIN_DATA_HEADER_LEN)
@@ -350,6 +324,32 @@ int mwifiex_uap_recv_packet(struct mwifiex_private *priv,
                        return 0;
        }
 
+       skb->dev = priv->netdev;
+       skb->protocol = eth_type_trans(skb, priv->netdev);
+       skb->ip_summed = CHECKSUM_NONE;
+
+       /* This is required only in case of 11n and USB/PCIE as we alloc
+        * a buffer of 4K only if its 11N (to be able to receive 4K
+        * AMSDU packets). In case of SD we allocate buffers based
+        * on the size of packet and hence this is not needed.
+        *
+        * Modifying the truesize here as our allocation for each
+        * skb is 4K but we only receive 2K packets and this cause
+        * the kernel to start dropping packets in case where
+        * application has allocated buffer based on 2K size i.e.
+        * if there a 64K packet received (in IP fragments and
+        * application allocates 64K to receive this packet but
+        * this packet would almost double up because we allocate
+        * each 1.5K fragment in 4K and pass it up. As soon as the
+        * 64K limit hits kernel will start to drop rest of the
+        * fragments. Currently we fail the Filesndl-ht.scr script
+        * for UDP, hence this fix
+        */
+       if ((adapter->iface_type == MWIFIEX_USB ||
+            adapter->iface_type == MWIFIEX_PCIE) &&
+           skb->truesize > MWIFIEX_RX_DATA_BUF_SIZE)
+               skb->truesize += (skb->len - MWIFIEX_RX_DATA_BUF_SIZE);
+
        /* Forward multicast/broadcast packet to upper layer*/
        if (in_interrupt())
                netif_rx(skb);