[PATCH 3/3] ARM: Fix DMA-bounce code to allow sync from_device and to_device with bidirectional mappings.
Arnd Bergmann
arnd at arndb.de
Wed Mar 26 18:10:29 EDT 2014
On Sunday 23 March 2014, Krzysztof Halasa wrote:
> This is equivalent of a more generic change to lib/dma-debug.c which is
> present since v2.6.33:
>
> commit 42d53b4ff7d61487d18274ebdf1f70c1aef6f122
> dma-debug: allow DMA_BIDIRECTIONAL mappings to be synced with DMA_FROM_DEVICE
> and DMA_TO_DEVICE.
>
> There is no need to perform full BIDIR sync (copying the buffers in case
> of swiotlb and similar schemes) if we know that the owner (CPU or device)
> hasn't altered the data.
>
> Addresses the false-positive reported at
> http://bugzilla.kernel.org/show_bug.cgi?id=14169
>
> Signed-off-by: Krzysztof Hałasa <khc at pm.waw.pl>
Looks good to me. Can you add it to Russell's patch tracker?
Acked-by: Arnd Bergmann <arnd at arndb.de>
Arnd
> diff --git a/arch/arm/common/dmabounce.c b/arch/arm/common/dmabounce.c
> index 1143c4d..b4c17cf 100644
> --- a/arch/arm/common/dmabounce.c
> +++ b/arch/arm/common/dmabounce.c
> @@ -375,7 +375,7 @@ static int __dmabounce_sync_for_cpu(struct device *dev, dma_addr_t addr,
>
> off = addr - buf->safe_dma_addr;
>
> - BUG_ON(buf->direction != dir);
> + BUG_ON(buf->direction != dir && buf->direction != DMA_BIDIRECTIONAL);
>
> dev_dbg(dev, "%s: unsafe buffer %p (dma=%#x off=%#lx) mapped to %p (dma=%#x)\n",
> __func__, buf->ptr, virt_to_dma(dev, buf->ptr), off,
> @@ -415,7 +415,7 @@ static int __dmabounce_sync_for_device(struct device *dev, dma_addr_t addr,
>
> off = addr - buf->safe_dma_addr;
>
> - BUG_ON(buf->direction != dir);
> + BUG_ON(buf->direction != dir && buf->direction != DMA_BIDIRECTIONAL);
>
> dev_dbg(dev, "%s: unsafe buffer %p (dma=%#x off=%#lx) mapped to %p (dma=%#x)\n",
> __func__, buf->ptr, virt_to_dma(dev, buf->ptr), off,
>
More information about the linux-arm-kernel
mailing list