aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/gianfar.c
diff options
context:
space:
mode:
authorAndy Fleming <afleming@freescale.com>2008-11-12 11:07:11 -0500
committerJeff Garzik <jgarzik@redhat.com>2008-11-14 18:18:30 -0500
commit81183059e89c36f9b4c41f9332d642c2e0bff971 (patch)
tree4004262f929bf732596bd83d77c43ffb8c9058d3 /drivers/net/gianfar.c
parent18acfa2597d57c19249346d130fc3334244557b4 (diff)
gianfar: Fix DMA unmap invocations
We weren't unmapping DMA memory, which will break when gianfar gets used on systems with more than 32-bits of memory. Also, it's just plain wrong. Signed-off-by: Andy Fleming <afleming@freescale.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/net/gianfar.c')
-rw-r--r--drivers/net/gianfar.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c
index 83a5cb6aa23b..c4af949bf860 100644
--- a/drivers/net/gianfar.c
+++ b/drivers/net/gianfar.c
@@ -1407,6 +1407,10 @@ static int gfar_clean_tx_ring(struct net_device *dev)
1407 if (bdp->status & TXBD_DEF) 1407 if (bdp->status & TXBD_DEF)
1408 dev->stats.collisions++; 1408 dev->stats.collisions++;
1409 1409
1410 /* Unmap the DMA memory */
1411 dma_unmap_single(&priv->dev->dev, bdp->bufPtr,
1412 bdp->length, DMA_TO_DEVICE);
1413
1410 /* Free the sk buffer associated with this TxBD */ 1414 /* Free the sk buffer associated with this TxBD */
1411 dev_kfree_skb_irq(priv->tx_skbuff[priv->skb_dirtytx]); 1415 dev_kfree_skb_irq(priv->tx_skbuff[priv->skb_dirtytx]);
1412 1416
@@ -1666,6 +1670,9 @@ int gfar_clean_rx_ring(struct net_device *dev, int rx_work_limit)
1666 1670
1667 skb = priv->rx_skbuff[priv->skb_currx]; 1671 skb = priv->rx_skbuff[priv->skb_currx];
1668 1672
1673 dma_unmap_single(&priv->dev->dev, bdp->bufPtr,
1674 priv->rx_buffer_size, DMA_FROM_DEVICE);
1675
1669 /* We drop the frame if we failed to allocate a new buffer */ 1676 /* We drop the frame if we failed to allocate a new buffer */
1670 if (unlikely(!newskb || !(bdp->status & RXBD_LAST) || 1677 if (unlikely(!newskb || !(bdp->status & RXBD_LAST) ||
1671 bdp->status & RXBD_ERR)) { 1678 bdp->status & RXBD_ERR)) {
@@ -1674,14 +1681,8 @@ int gfar_clean_rx_ring(struct net_device *dev, int rx_work_limit)
1674 if (unlikely(!newskb)) 1681 if (unlikely(!newskb))
1675 newskb = skb; 1682 newskb = skb;
1676 1683
1677 if (skb) { 1684 if (skb)
1678 dma_unmap_single(&priv->dev->dev,
1679 bdp->bufPtr,
1680 priv->rx_buffer_size,
1681 DMA_FROM_DEVICE);
1682
1683 dev_kfree_skb_any(skb); 1685 dev_kfree_skb_any(skb);
1684 }
1685 } else { 1686 } else {
1686 /* Increment the number of packets */ 1687 /* Increment the number of packets */
1687 dev->stats.rx_packets++; 1688 dev->stats.rx_packets++;