From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932840AbdKONie (ORCPT ); Wed, 15 Nov 2017 08:38:34 -0500 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:39812 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932232AbdKONi1 (ORCPT ); Wed, 15 Nov 2017 08:38:27 -0500 Subject: Re: [RFC v2 2/2] base: dma-mapping: Postpone page_to_pfn() on mmap() To: Jacopo Mondi , ysato@users.sourceforge.jp, dalias@libc.org, laurent.pinchart@ideasonboard.com, geert@linux-m68k.org Cc: linux-renesas-soc@vger.kernel.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-sh@vger.kernel.org References: <1510679286-6988-1-git-send-email-jacopo+renesas@jmondi.org> <1510679286-6988-3-git-send-email-jacopo+renesas@jmondi.org> From: Robin Murphy Message-ID: Date: Wed, 15 Nov 2017 13:38:23 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <1510679286-6988-3-git-send-email-jacopo+renesas@jmondi.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 14/11/17 17:08, Jacopo Mondi wrote: > On SH4 architecture, with SPARSEMEM memory model, translating page to > pfn hangs the CPU. Post-pone translation to pfn after > dma_mmap_from_dev_coherent() function call as it succeeds and make page > translation not necessary. > > This patch was suggested by Laurent Pinchart and he's working to submit > a proper fix mainline. Not sending for inclusion at the moment. Y'know, I think this patch does have some merit by itself - until we know that cpu_addr *doesn't* represent some device-private memory which is not guaranteed to be backed by a struct page, calling virt_to_page() on it is arguably semantically incorrect, even if it might happen to be benign in most cases. Robin. > Suggested-by: Laurent Pinchart > Signed-off-by: Jacopo Mondi > --- > drivers/base/dma-mapping.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/base/dma-mapping.c b/drivers/base/dma-mapping.c > index e584edd..73d64d3 100644 > --- a/drivers/base/dma-mapping.c > +++ b/drivers/base/dma-mapping.c > @@ -227,8 +227,8 @@ int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, > #ifndef CONFIG_ARCH_NO_COHERENT_DMA_MMAP > unsigned long user_count = vma_pages(vma); > unsigned long count = PAGE_ALIGN(size) >> PAGE_SHIFT; > - unsigned long pfn = page_to_pfn(virt_to_page(cpu_addr)); > unsigned long off = vma->vm_pgoff; > + unsigned long pfn; > > vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); > > @@ -236,6 +236,7 @@ int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, > return ret; > > if (off < count && user_count <= (count - off)) { > + pfn = page_to_pfn(virt_to_page(cpu_addr)); > ret = remap_pfn_range(vma, vma->vm_start, > pfn + off, > user_count << PAGE_SHIFT, > -- > 2.7.4 > > _______________________________________________ > iommu mailing list > iommu@lists.linux-foundation.org > https://lists.linuxfoundation.org/mailman/listinfo/iommu >