Re: DMA_NONCOHERENT and dma_map_single

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

 



On Sun, Jan 18, 2004 at 08:50:06PM +0100, Dimitri Torfs wrote:

>   dma_map_single() is supposed to be called on a buffer that exactly
>   starts and ends on a cacheline boundary, otherwise "bad things"
>   (e.g. overwrite of data that was written by device, ...) (especially
>   on dma non-coherent systems) may happen. 
> 
>   So what should be done when dma_map_single is not called
>   with a sane (ptr, size) argument ?
> 
>     - is the driver (caller) considered buggy and should we return a 0
>       return-value ?
>     - is the driver (caller) considered buggy but we do the mapping
>       anyway, hoping that the driver has not/will not touched/touch
>       the boundary cachelines ?

The driver is considered buggy;  dma_map_single's behaviour is undefined so
it's perfectly ok if it paints neighbour's cat pink ;-)

>     - should we take appropriate actions to make sure the
>       cache-effects do not come into play (e.g. by using some kind of
>       bounce buffer) ?

Technically bounce buffers can be handled inside dma_map_single & co but
it's not a good idea.  Better set the appropriate flags so higher levels
can allocate memory with the appropriate GFP_* flags and thereby hopefully
avoid overly frequent buffer bouncing.

  Ralf


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux