|
@@ -519,6 +519,15 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush)
|
|
if (!skb)
|
|
if (!skb)
|
|
continue;
|
|
continue;
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Synchronize the DMA transfer with CPU before
|
|
|
|
+ * 1. accessing the frame
|
|
|
|
+ * 2. requeueing the same buffer to h/w
|
|
|
|
+ */
|
|
|
|
+ pci_dma_sync_single_for_cpu(sc->pdev, bf->bf_buf_addr,
|
|
|
|
+ sc->rx.bufsize,
|
|
|
|
+ PCI_DMA_FROMDEVICE);
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* If we're asked to flush receive queue, directly
|
|
* If we're asked to flush receive queue, directly
|
|
* chain it back at the queue without processing it.
|
|
* chain it back at the queue without processing it.
|
|
@@ -547,10 +556,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush)
|
|
if (!requeue_skb)
|
|
if (!requeue_skb)
|
|
goto requeue;
|
|
goto requeue;
|
|
|
|
|
|
- /* Sync and unmap the frame */
|
|
|
|
- pci_dma_sync_single_for_cpu(sc->pdev, bf->bf_buf_addr,
|
|
|
|
- sc->rx.bufsize,
|
|
|
|
- PCI_DMA_FROMDEVICE);
|
|
|
|
|
|
+ /* Unmap the frame */
|
|
pci_unmap_single(sc->pdev, bf->bf_buf_addr,
|
|
pci_unmap_single(sc->pdev, bf->bf_buf_addr,
|
|
sc->rx.bufsize,
|
|
sc->rx.bufsize,
|
|
PCI_DMA_FROMDEVICE);
|
|
PCI_DMA_FROMDEVICE);
|