Received: by 10.213.65.68 with SMTP id h4csp2477747imn; Mon, 9 Apr 2018 04:16:37 -0700 (PDT) X-Google-Smtp-Source: AIpwx48OIo9UGtH3jBDb9LUn20wvzRTJizpp6TjSLbY8JdJtvXEfiT4Pjf+eFQQjfyihtZfKSVOz X-Received: by 2002:a17:902:2941:: with SMTP id g59-v6mr38307770plb.55.1523272597049; Mon, 09 Apr 2018 04:16:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523272597; cv=none; d=google.com; s=arc-20160816; b=A+9m9KLHf+FpY7JxY17/7/M1rwqVwUX0EbYb2wPM0LSZziH1eMFrIYWhoqRmOtgP6z NbrfWmHwl2DzB9zt1sAlJpKbb7GWlVAMQJJS2g+tzRQE+uqFgbJSYmgek8nRRi5ZncBq XHRi3Nd85OGQVXq6NA5QfeK183V5NjfWHtcScie9S5tZKFy/bUv3ykA1IL3i/upiFkrl VMtzHj0oGyqHfeMCo9aNtu4B2a9ErtCzDEhjyvpwf572DSqD8I+4btenFxLS7HKZ9ooZ PAJoMwYl6DYhKFmlZoOjwknicAphyLDSBFr5iC5zlYhwRbNx5EIQxTxGgKNWavuVSLZw 13iw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:arc-authentication-results; bh=rj+Ky4twhHgmh2sN9ilcktNQlIni2t6TVsep5xi7f8M=; b=iU165R7YZJ3/1lm6oAMb4//1gqk04jPvU3KcRkzVZDwOlnBW9dV29pWeZZKNS5U8Oq waw2S8UC0s93aPZr7guQodGRldJ2uQtm+mI6y7vzo7xc2q1ze8HAu9DHn/SKVZVh2l6R 1biY5uOTXeL1qXSSsy8P9q1QuycBm0ajMCzNyIOsD4FcBiVHZTvR+YKb7acXM4DPKrMa xVEvNS0IMbqUKBtM+9CLF5UrTZnZbabEFdWkd7G/Q4/Mxm86IcbUs/fHliY3RGQQ3DVl hTFTN18JVj8VpFjkQHyHiAoSjLxiT019vo54nwyR41xp1poULf5mZcE8Y1DBUJq20lzH H9hA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s23-v6si48567plp.592.2018.04.09.04.16.00; Mon, 09 Apr 2018 04:16:37 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752107AbeDILLb (ORCPT + 99 others); Mon, 9 Apr 2018 07:11:31 -0400 Received: from foss.arm.com ([217.140.101.70]:54882 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751702AbeDILL3 (ORCPT ); Mon, 9 Apr 2018 07:11:29 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 00B0BF; Mon, 9 Apr 2018 04:11:29 -0700 (PDT) Received: from [10.1.210.88] (e110467-lin.cambridge.arm.com [10.1.210.88]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4FE9F3F487; Mon, 9 Apr 2018 04:11:27 -0700 (PDT) Subject: Re: [RFC v2 2/2] base: dma-mapping: Postpone page_to_pfn() on mmap() To: jacopo mondi Cc: Jacopo Mondi , ysato@users.sourceforge.jp, dalias@libc.org, laurent.pinchart@ideasonboard.com, geert@linux-m68k.org, 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> <20180409072547.GU20945@w540> From: Robin Murphy Message-ID: <7da3f31e-e4ad-7f1a-e66c-0d3e0fb8b27d@arm.com> Date: Mon, 9 Apr 2018 12:11:22 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <20180409072547.GU20945@w540> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Jacopo, On 09/04/18 08:25, jacopo mondi wrote: > Hi Robin, Laurent, > a long time passed, sorry about this. > > On Wed, Nov 15, 2017 at 01:38:23PM +0000, Robin Murphy wrote: >> 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. > > I still need to carry this patch in my trees to have a working dma memory mapping > on SH4 platforms. My understanding from your comment is that there may > be a way forward for this patch, do you still think the same? Have you > got any suggestion on how to improve this eventually for inclusion? As before, the change itself does seem reasonable; it might be worth rewording the commit message in more general terms rather than making it sound like an SH-specific workaround (which I really don't think it is), but otherwise I'd say just repost it as a non-RFC patch. Robin. > > Thanks > j > >> >> 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 >>>