From 254d851d8a9434e9c8a12a6ec96538ba13101600 Mon Sep 17 00:00:00 2001
From: Florian Fainelli <florian@openwrt.org>
Date: Mon, 15 Oct 2012 21:03:57 +0000
Subject: [PATCH] nuport-mac: various fixes

- properly check for the link up condition in the phylib adjust callback
- do not assign skb->dev, eth_type_trans() already does it
- handle skb allocation failures in the refill path

SVN-Revision: 33780
---
 .../files-3.3/drivers/net/ethernet/mcs8140/nuport_mac.c   | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/target/linux/mcs814x/files-3.3/drivers/net/ethernet/mcs8140/nuport_mac.c b/target/linux/mcs814x/files-3.3/drivers/net/ethernet/mcs8140/nuport_mac.c
index fe95ea7f7d9..2dc23751598 100644
--- a/target/linux/mcs814x/files-3.3/drivers/net/ethernet/mcs8140/nuport_mac.c
+++ b/target/linux/mcs814x/files-3.3/drivers/net/ethernet/mcs8140/nuport_mac.c
@@ -396,7 +396,7 @@ static void nuport_mac_adjust_link(struct net_device *dev)
 		priv->old_link = phydev->link;
 	}
 
-	if (phydev->link & (priv->old_duplex != phydev->duplex)) {
+	if (phydev->link && (priv->old_duplex != phydev->duplex)) {
 		reg = nuport_mac_readl(CTRL_REG);
 		if (phydev->duplex == DUPLEX_FULL)
 			reg |= DUPLEX_FULL;
@@ -564,7 +564,6 @@ static int nuport_mac_rx(struct net_device *dev, int limit)
 
 		/* Get packet status */
 		status = get_unaligned((u32 *) (skb->data + len));
-		skb->dev = dev;
 
 		dma_unmap_single(&priv->pdev->dev, priv->rx_addr, skb->len,
 				DMA_FROM_DEVICE);
@@ -615,6 +614,9 @@ static int nuport_mac_rx(struct net_device *dev, int limit)
 
 exit:
 		skb = netdev_alloc_skb(dev, RX_ALLOC_SIZE);
+		if (!skb)
+			goto out;
+
 		skb_reserve(skb, RX_SKB_HEADROOM);
 		priv->rx_skb[priv->cur_rx] = skb;
 		priv->irq_rxskb[priv->cur_rx] = 1;
@@ -624,7 +626,7 @@ exit:
 			priv->cur_rx = 0;
 		count++;
 	}
-
+out:
 	return count;
 }
 
-- 
GitLab