diff options
author | David S. Miller <davem@davemloft.net> | 2008-11-14 15:36:57 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-11-14 15:36:57 -0800 |
commit | a2224ad38704a3cfe033313f803183a23e6b7886 (patch) | |
tree | ec764bccd0065e97e927c26460cf64f11a92e0f4 /drivers/net/gianfar.c | |
parent | 5421ae0153b4ba0469967cfd8de96144e3bf3979 (diff) | |
parent | 3e44017b589f001941723dfdfede2ca6284dddce (diff) | |
download | op-kernel-dev-a2224ad38704a3cfe033313f803183a23e6b7886.zip op-kernel-dev-a2224ad38704a3cfe033313f803183a23e6b7886.tar.gz |
Merge branch 'davem-fixes' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
Diffstat (limited to 'drivers/net/gianfar.c')
-rw-r--r-- | drivers/net/gianfar.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c index 83a5cb6..c4af949 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) if (bdp->status & TXBD_DEF) dev->stats.collisions++; + /* Unmap the DMA memory */ + dma_unmap_single(&priv->dev->dev, bdp->bufPtr, + bdp->length, DMA_TO_DEVICE); + /* Free the sk buffer associated with this TxBD */ dev_kfree_skb_irq(priv->tx_skbuff[priv->skb_dirtytx]); @@ -1666,6 +1670,9 @@ int gfar_clean_rx_ring(struct net_device *dev, int rx_work_limit) skb = priv->rx_skbuff[priv->skb_currx]; + dma_unmap_single(&priv->dev->dev, bdp->bufPtr, + priv->rx_buffer_size, DMA_FROM_DEVICE); + /* We drop the frame if we failed to allocate a new buffer */ if (unlikely(!newskb || !(bdp->status & RXBD_LAST) || bdp->status & RXBD_ERR)) { @@ -1674,14 +1681,8 @@ int gfar_clean_rx_ring(struct net_device *dev, int rx_work_limit) if (unlikely(!newskb)) newskb = skb; - if (skb) { - dma_unmap_single(&priv->dev->dev, - bdp->bufPtr, - priv->rx_buffer_size, - DMA_FROM_DEVICE); - + if (skb) dev_kfree_skb_any(skb); - } } else { /* Increment the number of packets */ dev->stats.rx_packets++; |