]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
E100: work around the driver using streaming DMA mapping for RX descriptors.
authorKrzysztof Halasa <khc@pm.waw.pl>
Tue, 14 Jul 2009 11:01:54 +0000 (11:01 +0000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sun, 16 Aug 2009 21:18:08 +0000 (14:18 -0700)
[ 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>
drivers/net/e100.c

index 0f9ee1348552b6d634e14b632476d8b29e6b9502..014dfb679856e68f8eeac80073e7e60fbbb60242 100644 (file)
@@ -1762,6 +1762,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;
        }