mirror of
https://github.com/torvalds/linux.git
synced 2024-11-13 15:41:39 +00:00
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>
This commit is contained in:
parent
18acfa2597
commit
81183059e8
@ -1407,6 +1407,10 @@ static int gfar_clean_tx_ring(struct net_device *dev)
|
|||||||
if (bdp->status & TXBD_DEF)
|
if (bdp->status & TXBD_DEF)
|
||||||
dev->stats.collisions++;
|
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 */
|
/* Free the sk buffer associated with this TxBD */
|
||||||
dev_kfree_skb_irq(priv->tx_skbuff[priv->skb_dirtytx]);
|
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];
|
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 */
|
/* We drop the frame if we failed to allocate a new buffer */
|
||||||
if (unlikely(!newskb || !(bdp->status & RXBD_LAST) ||
|
if (unlikely(!newskb || !(bdp->status & RXBD_LAST) ||
|
||||||
bdp->status & RXBD_ERR)) {
|
bdp->status & RXBD_ERR)) {
|
||||||
@ -1674,14 +1681,8 @@ int gfar_clean_rx_ring(struct net_device *dev, int rx_work_limit)
|
|||||||
if (unlikely(!newskb))
|
if (unlikely(!newskb))
|
||||||
newskb = skb;
|
newskb = skb;
|
||||||
|
|
||||||
if (skb) {
|
if (skb)
|
||||||
dma_unmap_single(&priv->dev->dev,
|
|
||||||
bdp->bufPtr,
|
|
||||||
priv->rx_buffer_size,
|
|
||||||
DMA_FROM_DEVICE);
|
|
||||||
|
|
||||||
dev_kfree_skb_any(skb);
|
dev_kfree_skb_any(skb);
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
/* Increment the number of packets */
|
/* Increment the number of packets */
|
||||||
dev->stats.rx_packets++;
|
dev->stats.rx_packets++;
|
||||||
|
Loading…
Reference in New Issue
Block a user