On Sat, Jul 04, 2009 at 11:41:46PM +0800, Ming Lei wrote: > dma_map_*() can invalidate cache lines, so dma_unmap_*() may do nothing. > But if someone accesses the dma buffer during dma transfer, you may > get the inconsistent result. You missed an important statement: accessing the dma buffer during a dma transfer is not permitted without an intervening call to the dma_sync_* functions. DMA buffers have the idea of "ownership" - they initially start off being owned by the CPU. Upon dma_map_*(), ownership transfers to the DMA agent, and remains there until either a dma_unmap_*() or dma_sync_single_for_cpu(). In the case of dma_sync_single_for_cpu(), it can only be given back to the DMA agent using dma_sync_single_for_device(). The important point from the above is that _only_ the current owner may access the buffer. So, if you've mapped a buffer, accessing the buffer subsequently without a call to dma_sync_single_for_cpu() is illegal. -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html