arc: Implement arch-specific dma_map_ops.mmap
authorAlexey Brodkin <abrodkin@synopsys.com>
Thu, 3 Nov 2016 15:06:13 +0000 (18:06 +0300)
committerVineet Gupta <vgupta@synopsys.com>
Thu, 3 Nov 2016 17:01:07 +0000 (10:01 -0700)
commita79a812131b07254c09cf325ec68c0d05aaed0b5
tree0b4d5bd96a3999319b2f4f6c31c558bcda35c1b0
parent8f6d9eb2a3f38f1acd04efa0aeb8b81f5373c923
arc: Implement arch-specific dma_map_ops.mmap

We used to use generic implementation of dma_map_ops.mmap which is
dma_common_mmap() but that only worked for simpler cached mappings when
vaddr = paddr.

If a driver requests uncached DMA buffer kernel maps it to virtual
address so that MMU gets involved and page uncached status takes into
account. In that case usage of dma_common_mmap() lead to mapping of
vaddr to vaddr for user-space which is obviously wrong. For more detals
please refer to verbose explanation here [1].

So here we implement our own version of mmap() which always deals
with dma_addr and maps underlying memory to user-space properly
(note that DMA buffer mapped to user-space is always uncached
because there's no way to properly manage cache from user-space).

[1] https://lkml.org/lkml/2016/10/26/973

Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: <stable@vger.kernel.org> #4.5+
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
arch/arc/mm/dma.c