rmnet: Accept packets larger than MTU

The initial Android RmNET device driver had a validation filter on
receive packets to ensure size did not exceed link MTU (1514
originally).  This assumed the link was symmetrical, such that
maximum transmit and receive transmission unit (MTU/MRU) were the
same. Over time, the symmetrical link assumption has been proven
incorrect, leading to cases where valid packets are dropped.

Remove the RX packet size validation filter such that packets
larger then configured MTU will be passed up the data stack.  This
strategy change is permitted under the kernel documentation.
Reference: kernel/Documentation/networking/netdevices.txt

CRs-Fixed: 290151
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Acked-by: Andrew Richardson <randrew@qualcomm.com>
diff --git a/drivers/net/msm_rmnet.c b/drivers/net/msm_rmnet.c
index 6889425..c9f5f43 100644
--- a/drivers/net/msm_rmnet.c
+++ b/drivers/net/msm_rmnet.c
@@ -272,60 +272,52 @@
 		if (sz == 0) break;
 		if (smd_read_avail(p->ch) < sz) break;
 
-		if (RMNET_IS_MODE_IP(opmode) ? (sz > dev->mtu) :
-						(sz > (dev->mtu + ETH_HLEN))) {
-			pr_err("[%s] rmnet_recv() discarding packet len %d (%d mtu)\n",
-				dev->name, sz, RMNET_IS_MODE_IP(opmode) ?
-					dev->mtu : (dev->mtu + ETH_HLEN));
-			ptr = 0;
+		skb = dev_alloc_skb(sz + NET_IP_ALIGN);
+		if (skb == NULL) {
+			pr_err("[%s] rmnet_recv() cannot allocate skb\n",
+			       dev->name);
 		} else {
-			skb = dev_alloc_skb(sz + NET_IP_ALIGN);
-			if (skb == NULL) {
-				pr_err("[%s] rmnet_recv() cannot allocate skb\n",
-				       dev->name);
+			skb->dev = dev;
+			skb_reserve(skb, NET_IP_ALIGN);
+			ptr = skb_put(skb, sz);
+			wake_lock_timeout(&p->wake_lock, HZ / 2);
+			if (smd_read(p->ch, ptr, sz) != sz) {
+				pr_err("[%s] rmnet_recv() smd lied about avail?!",
+					dev->name);
+				ptr = 0;
+				dev_kfree_skb_irq(skb);
 			} else {
-				skb->dev = dev;
-				skb_reserve(skb, NET_IP_ALIGN);
-				ptr = skb_put(skb, sz);
-				wake_lock_timeout(&p->wake_lock, HZ / 2);
-				if (smd_read(p->ch, ptr, sz) != sz) {
-					pr_err("[%s] rmnet_recv() smd lied about avail?!",
-						dev->name);
-					ptr = 0;
-					dev_kfree_skb_irq(skb);
+				/* Handle Rx frame format */
+				spin_lock_irqsave(&p->lock, flags);
+				opmode = p->operation_mode;
+				spin_unlock_irqrestore(&p->lock, flags);
+
+				if (RMNET_IS_MODE_IP(opmode)) {
+					/* Driver in IP mode */
+					skb->protocol =
+					  rmnet_ip_type_trans(skb, dev);
 				} else {
-					/* Handle Rx frame format */
-					spin_lock_irqsave(&p->lock, flags);
-					opmode = p->operation_mode;
-					spin_unlock_irqrestore(&p->lock, flags);
-
-					if (RMNET_IS_MODE_IP(opmode)) {
-						/* Driver in IP mode */
-						skb->protocol =
-						  rmnet_ip_type_trans(skb, dev);
-					} else {
-						/* Driver in Ethernet mode */
-						skb->protocol =
-						  eth_type_trans(skb, dev);
-					}
-					if (RMNET_IS_MODE_IP(opmode) ||
-					    count_this_packet(ptr, skb->len)) {
-#ifdef CONFIG_MSM_RMNET_DEBUG
-						p->wakeups_rcv +=
-							rmnet_cause_wakeup(p);
-#endif
-						p->stats.rx_packets++;
-						p->stats.rx_bytes += skb->len;
-					}
-					DBG1("[%s] Rx packet #%lu len=%d\n",
-						dev->name, p->stats.rx_packets,
-						skb->len);
-
-					/* Deliver to network stack */
-					netif_rx(skb);
+					/* Driver in Ethernet mode */
+					skb->protocol =
+					  eth_type_trans(skb, dev);
 				}
-				continue;
+				if (RMNET_IS_MODE_IP(opmode) ||
+				    count_this_packet(ptr, skb->len)) {
+#ifdef CONFIG_MSM_RMNET_DEBUG
+					p->wakeups_rcv +=
+					rmnet_cause_wakeup(p);
+#endif
+					p->stats.rx_packets++;
+					p->stats.rx_bytes += skb->len;
+				}
+				DBG1("[%s] Rx packet #%lu len=%d\n",
+					dev->name, p->stats.rx_packets,
+					skb->len);
+
+				/* Deliver to network stack */
+				netif_rx(skb);
 			}
+			continue;
 		}
 		if (smd_read(p->ch, ptr, sz) != sz)
 			pr_err("[%s] rmnet_recv() smd lied about avail?!",