[PATCH 06/11] de2104x: fix DMA sync_single length error

Stephen Hemminger
2010-01-20T21:23:06Z

[-- Attachment #1: de2104x.patch --]
[-- Type: text/plain, Size: 992 bytes --]

The DMA api requires that the full mapping be sync'd when
copying frame. First found by Jarek on sky2.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>

--- a/drivers/net/tulip/de2104x.c 2010-01-20 11:41:20.878138314 -0800
+++ b/drivers/net/tulip/de2104x.c 2010-01-20 11:41:59.858847380 -0800
@@ -456,11 +456,13 @@ static void de_rx (struct de_private *de
buflen, PCI_DMA_FROMDEVICE);
de->rx_skb[rx_tail].skb = copy_skb;
} else {
- pci_dma_sync_single_for_cpu(de->pdev, mapping, len, PCI_DMA_FROMDEVICE);
+ pci_dma_sync_single_for_cpu(de->pdev, mapping,
+ buflen, PCI_DMA_FROMDEVICE);
skb_reserve(copy_skb, RX_OFFSET);
skb_copy_from_linear_data(skb, skb_put(copy_skb, len),
len);
- pci_dma_sync_single_for_device(de->pdev, mapping, len, PCI_DMA_FROMDEVICE);
+ pci_dma_sync_single_for_device(de->pdev, mapping,
+ buflen, PCI_DMA_FROMDEVICE);

/* We'll reuse the original ring buffer. */
skb = copy_skb;

--