Re: dma_unmap_single() lacking cache sync on some archs?

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

 



Hi,

On Tue, Sep 27, 2011 at 5:13 AM, Arvid Brodin <arvid.brodin@xxxxxxxx> wrote:
> [Resending with CC to affected parties]
>
> Hi,
>
> I would expect cache synchronization for DMA_TO_DEVICE and DMA_BIDIRECTIONAL
> when dma_map_single() is called, and for DMA_FROM_DEVICE and DMA_BIDIRECTIONAL
> when dma_unmap_single() is called.
>
> However, on some architechtures (at least avr32, blackfin, ...), cache
> synchronization only happens when dma_map_single() is called (and then
> irrespective of DMA direction). dma_unmap_single() is a no-op for these archs.
>
> See e.g. http://lxr.linux.no/#linux+v3.0.4/arch/avr32/include/asm/dma-mapping.h#L117
>
> Isn't this a bug?

I don't think so. What do other architectures do?

We always need to sync before the transfer because if there is dirty
data in the cache, it might get written to RAM during the transfer,
which would be bad. Then, since the relevant cache lines are already
clean and invalid, and the CPU is not allowed to access the buffer
during the transfer, there's no need to sync again when the transfer
is complete.

Havard
--
To unsubscribe from this list: send the line "unsubscribe linux-embedded" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Gstreamer Embedded]     [Linux MMC Devel]     [U-Boot V2]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux ARM Kernel]     [Linux OMAP]     [Linux SCSI]

  Powered by Linux