- 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
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33780
3c298f89-4303-0410-b956-
a3cf2f4a3e73
priv->old_link = phydev->link;
}
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;
reg = nuport_mac_readl(CTRL_REG);
if (phydev->duplex == DUPLEX_FULL)
reg |= DUPLEX_FULL;
/* Get packet status */
status = get_unaligned((u32 *) (skb->data + len));
/* Get packet status */
status = get_unaligned((u32 *) (skb->data + len));
dma_unmap_single(&priv->pdev->dev, priv->rx_addr, skb->len,
DMA_FROM_DEVICE);
dma_unmap_single(&priv->pdev->dev, priv->rx_addr, skb->len,
DMA_FROM_DEVICE);
exit:
skb = netdev_alloc_skb(dev, RX_ALLOC_SIZE);
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;
skb_reserve(skb, RX_SKB_HEADROOM);
priv->rx_skb[priv->cur_rx] = skb;
priv->irq_rxskb[priv->cur_rx] = 1;
priv->cur_rx = 0;
count++;
}
priv->cur_rx = 0;
count++;
}