Re: using cacheable buffer for descriptor

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

 



于 Sat, 4 Jul 2009 19:07:00 +0100
Russell King - ARM Linux <linux@xxxxxxxxxxxxxxxx> 写道:

> 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().
>

IMHO, only if dma transfer is over dma_sync_*_cpu() can be called to
access the dma buffer safely. Currently, dma_sync_*_cpu() does
nothing like dma_unmap_* in ARM if dma bounce isdisabled.
 
> 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.


-- 
Lei Ming
--
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