ARM: use flush_kernel_dcache_area() for dmabounce
authorRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 26 Nov 2009 12:31:15 +0000 (12:31 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 14 Dec 2009 14:53:22 +0000 (14:53 +0000)
After copying data from the bounce buffer to the real buffer, use
flush_kernel_dcache_page() to ensure that data is written back in
manner coherent with future userspace mappings.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/common/dmabounce.c

index 5a375e5fef21766c3a5120c16c7cd2f8929b42ea..bc90364a96c7bf364fdd10aa198a0d93ab2af2b3 100644 (file)
@@ -308,15 +308,11 @@ static inline void unmap_single(struct device *dev, dma_addr_t dma_addr,
                        memcpy(ptr, buf->safe, size);
 
                        /*
-                        * DMA buffers must have the same cache properties
-                        * as if they were really used for DMA - which means
-                        * data must be written back to RAM.  Note that
-                        * we don't use dmac_flush_range() here for the
-                        * bidirectional case because we know the cache
-                        * lines will be coherent with the data written.
+                        * Since we may have written to a page cache page,
+                        * we need to ensure that the data will be coherent
+                        * with user mappings.
                         */
-                       dmac_clean_range(ptr, ptr + size);
-                       outer_clean_range(__pa(ptr), __pa(ptr) + size);
+                       __cpuc_flush_kernel_dcache_area(ptr, size);
                }
                free_safe_buffer(dev->archdata.dmabounce, buf);
        }