aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrzysztof Halasa <khc@pm.waw.pl>2009-07-14 11:01:54 +0000
committerGreg Kroah-Hartman <gregkh@suse.de>2009-07-30 16:06:14 -0700
commit4662e31e5b9ae9ad4e0422c97ed9c757ac6d678f (patch)
treea426f9ab02141b6c0ebb8b0e5ace2fea99dcc5b1
parent2fe2c6bb0303064bde3b8ca0fd90c4367868486e (diff)
E100: work around the driver using streaming DMA mapping for RX descriptors.
[ Upstream commit 303d67c288319768b19ed8dbed429fef7eb7c275 ] E100 places it's RX packet descriptors inside skb->data and uses them with bidirectional streaming DMA mapping. Unfortunately it fails to transfer skb->data ownership to the device after it reads the descriptor's status, breaking on non-coherent (e.g., ARM) platforms. This have to be converted to use coherent memory for the descriptors. Signed-off-by: Krzysztof Halasa <khc@pm.waw.pl> Acked-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/net/e100.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/net/e100.c b/drivers/net/e100.c
index 5cf78d612c4..d991167082f 100644
--- a/drivers/net/e100.c
+++ b/drivers/net/e100.c
@@ -1840,6 +1840,9 @@ static int e100_rx_indicate(struct nic *nic, struct rx *rx,
if (ioread8(&nic->csr->scb.status) & rus_no_res)
nic->ru_running = RU_SUSPENDED;
+ pci_dma_sync_single_for_device(nic->pdev, rx->dma_addr,
+ sizeof(struct rfd),
+ PCI_DMA_BIDIRECTIONAL);
return -ENODATA;
}