Browse Source

ARM: use flush_kernel_dcache_area() for dmabounce

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>
Russell King 15 years ago
parent
commit
f74f7e57ae
1 changed files with 4 additions and 8 deletions
  1. 4 8
      arch/arm/common/dmabounce.c

+ 4 - 8
arch/arm/common/dmabounce.c

@@ -308,15 +308,11 @@ static inline void unmap_single(struct device *dev, dma_addr_t dma_addr,
 			memcpy(ptr, buf->safe, size);
 			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);
 		free_safe_buffer(dev->archdata.dmabounce, buf);
 	}
 	}