Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3030667imu; Fri, 18 Jan 2019 03:39:45 -0800 (PST) X-Google-Smtp-Source: ALg8bN5RFu1Xr6It9gEnHEI0Mt/gBMjrgnKsfdADvrokDVZ4+2qbjpgHKbDiNt5d5hw+SkG1CyxA X-Received: by 2002:a63:7154:: with SMTP id b20mr17229294pgn.342.1547811585427; Fri, 18 Jan 2019 03:39:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547811585; cv=none; d=google.com; s=arc-20160816; b=OYHfJ2MYsKp19Z6YRElNXc6f2E7JCAND4NRqM1d/pdKgI9FucmJKDT8TMpFQnY3XlM fPCdTosOpeZrQdDFA9rKDLd6BHnRqn9lqfJagPwA0YslEbPp/5NxbbvpF9cMb80NIgD4 2zPXjoRn+yQ4HBUdCGt6KPaJ9pBwIJVqGPsrTYfUShpAp/yz66Foafr8jdW08wb50YLY Bao2QMeTlXEYYJ2GQB36ybaeEllig4gRtzS1IVUaPXYjXbznIRDgI6zLz6/9M4D+n9HX 08MknSh+o2glRpG3E/HfMLZQcAX9XeDddxifiK6TCh4SaGizdpCkrVDUlajlH05posv/ rbuQ== 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:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=onP7tSqCOObp60S51bk8Ez5+ZsHmuF3HzNza6b83R+4=; b=FqL/+wI53e8lmrNGGezrh52CWOLlval3CPcsSTHi+Isslydc/6et1n+5qqpykiJx+/ ljVq6mZzdF2NW80KraCczCkypHtmicszLQxn1fau1Wb5H9xhq/swcy5LVsU2rBrot/zx UP3viFu5h4c9P/1iS85QdBrZyvkSAtedv7ZzRK0bvqvxp/Z2ez+IwWtOTQZ8p5Pn2y17 I/Bqe7mD5M1gqGBDHBWSpk9upHAgCK12Owg4OBVc4JnJBHhAQm3b9vpZAv7WsN7md2Rw SKKn+lo7OvkR045hjv+r6WBL2wbT58db04pqQHL4KzOiLF8O3QjFJW1VyZte7Qfiajzp zHVw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infradead.org header.s=bombadil.20170209 header.b=JUFdV6ag; 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 d142si4527319pfd.93.2019.01.18.03.39.27; Fri, 18 Jan 2019 03:39:45 -0800 (PST) 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; dkim=fail header.i=@infradead.org header.s=bombadil.20170209 header.b=JUFdV6ag; 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 S1727544AbfARLhw (ORCPT + 99 others); Fri, 18 Jan 2019 06:37:52 -0500 Received: from bombadil.infradead.org ([198.137.202.133]:56758 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727467AbfARLhr (ORCPT ); Fri, 18 Jan 2019 06:37:47 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20170209; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From :Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=onP7tSqCOObp60S51bk8Ez5+ZsHmuF3HzNza6b83R+4=; b=JUFdV6agaFlBexuYPNCElM7UK6 WXxyEtr534d3QnhsVx08q+lon+LZEVQMb0n6rbe6tLa0atF64kIigAomBV3MqHJfCzuOyuLzFSmCa A+MiekCAK8Ue5cg/RkhOkq+Q9KmTJh7KZlF7tO58xwSVIQpjJgLwqo/DSwpEuwUQEnr6IIXhv/0JT HY0MBtQD+zjWL1kda54zSFsyDKlfneB04unHhLfEuJz7s6ki78MxTpYupbDqdS8xXBLZiIZj/0Y6t luVZesGpiP4R7w80kQgHjRRoBeeJh4UhvCu88QkzxRUH+lOopcIJtR6IpxTnWxrFKL166SlKn54AA voqJBe4A==; Received: from 089144210168.atnat0019.highway.a1.net ([89.144.210.168] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.90_1 #2 (Red Hat Linux)) id 1gkSSx-0005Rq-Ba; Fri, 18 Jan 2019 11:37:40 +0000 From: Christoph Hellwig To: Pawel Osciak , Marek Szyprowski , Kyungmin Park , =?UTF-8?q?Niklas=20S=C3=B6derlund?= Cc: Russell King , Mauro Carvalho Chehab , iommu@lists.linux-foundation.org, linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab Subject: [PATCH 3/3] videobuf2: replace a layering violation with dma_map_resource Date: Fri, 18 Jan 2019 12:37:27 +0100 Message-Id: <20190118113727.3270-4-hch@lst.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190118113727.3270-1-hch@lst.de> References: <20190118113727.3270-1-hch@lst.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org vb2_dc_get_userptr pokes into arm direct mapping details to get the resemblance of a dma address for a a physical address that does is not backed by a page struct. Not only is this not portable to other architectures with dma direct mapping offsets, but also not to uses of IOMMUs of any kind. Switch to the proper dma_map_resource / dma_unmap_resource interface instead. Signed-off-by: Christoph Hellwig Acked-by: Mauro Carvalho Chehab --- .../common/videobuf2/videobuf2-dma-contig.c | 41 ++++--------------- 1 file changed, 9 insertions(+), 32 deletions(-) diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c index aff0ab7bf83d..82389aead6ed 100644 --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c @@ -439,42 +439,14 @@ static void vb2_dc_put_userptr(void *buf_priv) set_page_dirty_lock(pages[i]); sg_free_table(sgt); kfree(sgt); + } else { + dma_unmap_resource(buf->dev, buf->dma_addr, buf->size, + buf->dma_dir, 0); } vb2_destroy_framevec(buf->vec); kfree(buf); } -/* - * For some kind of reserved memory there might be no struct page available, - * so all that can be done to support such 'pages' is to try to convert - * pfn to dma address or at the last resort just assume that - * dma address == physical address (like it has been assumed in earlier version - * of videobuf2-dma-contig - */ - -#ifdef __arch_pfn_to_dma -static inline dma_addr_t vb2_dc_pfn_to_dma(struct device *dev, unsigned long pfn) -{ - return (dma_addr_t)__arch_pfn_to_dma(dev, pfn); -} -#elif defined(__pfn_to_bus) -static inline dma_addr_t vb2_dc_pfn_to_dma(struct device *dev, unsigned long pfn) -{ - return (dma_addr_t)__pfn_to_bus(pfn); -} -#elif defined(__pfn_to_phys) -static inline dma_addr_t vb2_dc_pfn_to_dma(struct device *dev, unsigned long pfn) -{ - return (dma_addr_t)__pfn_to_phys(pfn); -} -#else -static inline dma_addr_t vb2_dc_pfn_to_dma(struct device *dev, unsigned long pfn) -{ - /* really, we cannot do anything better at this point */ - return (dma_addr_t)(pfn) << PAGE_SHIFT; -} -#endif - static void *vb2_dc_get_userptr(struct device *dev, unsigned long vaddr, unsigned long size, enum dma_data_direction dma_dir) { @@ -528,7 +500,12 @@ static void *vb2_dc_get_userptr(struct device *dev, unsigned long vaddr, for (i = 1; i < n_pages; i++) if (nums[i-1] + 1 != nums[i]) goto fail_pfnvec; - buf->dma_addr = vb2_dc_pfn_to_dma(buf->dev, nums[0]); + buf->dma_addr = dma_map_resource(buf->dev, + __pfn_to_phys(nums[0]), size, buf->dma_dir, 0); + if (dma_mapping_error(buf->dev, buf->dma_addr)) { + ret = -ENOMEM; + goto fail_pfnvec; + } goto out; } -- 2.20.1