[PATCH 01/11] tg3: fix DMA sync_single length error

Stephen Hemminger
2010-01-20T21:22:59Z

[-- Attachment #1: tg3-dma-fix.patch --]
[-- Type: text/plain, Size: 951 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/tg3.c 2010-01-19 21:38:07.680163220 -0800
+++ b/drivers/net/tg3.c 2010-01-20 10:03:52.598977275 -0800
@@ -4653,9 +4653,13 @@ static int tg3_rx(struct tg3_napi *tnapi

skb_reserve(copy_skb, TG3_RAW_IP_ALIGN);
skb_put(copy_skb, len);
- pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
+ pci_dma_sync_single_for_cpu(tp->pdev, dma_addr,
+ tp->rx_pkt_map_sz,
+ PCI_DMA_FROMDEVICE);
skb_copy_from_linear_data(skb, copy_skb->data, len);
- pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
+ pci_dma_sync_single_for_device(tp->pdev, dma_addr,
+ tp->rx_pkt_map_sz,
+ PCI_DMA_FROMDEVICE);

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

--