diff options
author | Krzysztof Halasa <khc@pm.waw.pl> | 2009-07-14 13:01:54 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-07-17 03:05:25 +0200 |
commit | 303d67c288319768b19ed8dbed429fef7eb7c275 (patch) | |
tree | 18e69016f5d32d2205171cddedc065e1e4b46b65 /drivers/net/e100.c | |
parent | bonding: clean muticast addresses when device changes type (diff) | |
download | linux-303d67c288319768b19ed8dbed429fef7eb7c275.tar.xz linux-303d67c288319768b19ed8dbed429fef7eb7c275.zip |
E100: work around the driver using streaming DMA mapping for RX descriptors.
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>
Diffstat (limited to 'drivers/net/e100.c')
-rw-r--r-- | drivers/net/e100.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/net/e100.c b/drivers/net/e100.c index efa680f4b8dd..41b648a67fec 100644 --- a/drivers/net/e100.c +++ b/drivers/net/e100.c @@ -1897,6 +1897,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; } |