Re: using cacheable buffer for descriptor

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux