All of lore.kernel.org
 help / color / mirror / Atom feed
From: robin.murphy@arm.com (Robin Murphy)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM64: dma-mapping: fix IOMMU-based dma_mmap_atts() implementation
Date: Tue, 16 Feb 2016 15:02:21 +0000	[thread overview]
Message-ID: <56C339FD.6040907@arm.com> (raw)
In-Reply-To: <1455632065-14620-1-git-send-email-m.szyprowski@samsung.com>

Hi Marek,

On 16/02/16 14:14, Marek Szyprowski wrote:
> IOMMU-based DMA-mapping implementation doesn't support
> dma_declare_coherent() based regions, so there is no point to call
> dma_mmap_from_coherent() from __iommu_mmap_atts(). This patch removes
> useless code.

I'm not sure that's the case - AFAICS a device could still have its own 
local memory despite being behind an IOMMU relative to the rest of the 
system. If it uses dma_declare_coherent() for that, the .alloc and .free 
callbacks here might be bypassed by dma_{alloc,free}_attrs() 
short-circuiting into dma_{alloc,release}_from_coherent(), but in the 
case of dma_mmap_attrs() it hits the .mmap callback first and only falls 
back to the from_coherent check in dma_common_mmap() if that isn't 
implemented.

Maybe the right thing to do would be to move this check (with its 
associated guards) out from dma_common_mmap() up to dma_mmap_attrs() to 
be consistent with alloc/free; so that it doesn't need to be 
reimplemented all over arch/{arm,arm64,mips} at all?

Robin.

> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
>   arch/arm64/mm/dma-mapping.c | 5 -----
>   1 file changed, 5 deletions(-)
>
> diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
> index 331c4ca..573b1e6 100644
> --- a/arch/arm64/mm/dma-mapping.c
> +++ b/arch/arm64/mm/dma-mapping.c
> @@ -636,14 +636,9 @@ static int __iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma,
>   			      struct dma_attrs *attrs)
>   {
>   	struct vm_struct *area;
> -	int ret;
>
>   	vma->vm_page_prot = __get_dma_pgprot(attrs, vma->vm_page_prot,
>   					     is_device_dma_coherent(dev));
> -
> -	if (dma_mmap_from_coherent(dev, vma, cpu_addr, size, &ret))
> -		return ret;
> -
>   	area = find_vm_area(cpu_addr);
>   	if (WARN_ON(!area || !area->pages))
>   		return -ENXIO;
>

  reply	other threads:[~2016-02-16 15:02 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-16 14:14 [PATCH] ARM64: dma-mapping: fix IOMMU-based dma_mmap_atts() implementation Marek Szyprowski
2016-02-16 15:02 ` Robin Murphy [this message]
2016-02-17  8:55   ` Marek Szyprowski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56C339FD.6040907@arm.com \
    --to=robin.murphy@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.