|
@@ -1920,9 +1920,6 @@ There are some more advanced barrier functions:
|
|
|
/* assign ownership */
|
|
|
desc->status = DEVICE_OWN;
|
|
|
|
|
|
- /* force memory to sync before notifying device via MMIO */
|
|
|
- wmb();
|
|
|
-
|
|
|
/* notify device of new descriptors */
|
|
|
writel(DESC_NOTIFY, doorbell);
|
|
|
}
|
|
@@ -1930,11 +1927,15 @@ There are some more advanced barrier functions:
|
|
|
The dma_rmb() allows us guarantee the device has released ownership
|
|
|
before we read the data from the descriptor, and the dma_wmb() allows
|
|
|
us to guarantee the data is written to the descriptor before the device
|
|
|
- can see it now has ownership. The wmb() is needed to guarantee that the
|
|
|
- cache coherent memory writes have completed before attempting a write to
|
|
|
- the cache incoherent MMIO region.
|
|
|
-
|
|
|
- See Documentation/DMA-API.txt for more information on consistent memory.
|
|
|
+ can see it now has ownership. Note that, when using writel(), a prior
|
|
|
+ wmb() is not needed to guarantee that the cache coherent memory writes
|
|
|
+ have completed before writing to the MMIO region. The cheaper
|
|
|
+ writel_relaxed() does not provide this guarantee and must not be used
|
|
|
+ here.
|
|
|
+
|
|
|
+ See the subsection "Kernel I/O barrier effects" for more information on
|
|
|
+ relaxed I/O accessors and the Documentation/DMA-API.txt file for more
|
|
|
+ information on consistent memory.
|
|
|
|
|
|
|
|
|
MMIO WRITE BARRIER
|