From patchwork Mon Mar 12 16:52:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Suman Anna X-Patchwork-Id: 10276763 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 924FD60580 for ; Mon, 12 Mar 2018 16:52:52 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8728928878 for ; Mon, 12 Mar 2018 16:52:52 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7BBAB28892; Mon, 12 Mar 2018 16:52:52 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 0065628878 for ; Mon, 12 Mar 2018 16:52:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:Subject:To :From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=6K084zEUG5HNL25qkat9GzN/0S4b+dSIjCNoyg3rFUA=; b=ckUENtcfPSMnE6 b3vCtbMAF1aU46nN0xbIvD70PfhvyslSY3Ky7QuVSbF5zHIalGzr8oUkOmd1u2wKEOM6AOAwHt3Js bK7ou0G37PniXJU7nepNFMS4GEpFNyvwcze4jushvu2uEmSAW6LqynjE487+G4EWE0FINl/pHNYgS T0OLr0A92uuxDx7ros1lgJPdtDtMSc4ZEJx9b+AzdD222KcfmsahkWySR0Kg1CJqgDvYjAwxw3d82 /7c3iU88RXazAMMxiGQ3NApbH3FpOnAbhPVUxfDrP75eaVMjVPhX5XvwHzwdu/3nbcKj5aJFRXgKp EnFKkm7RjsiEJOsFVH0Q==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.89 #1 (Red Hat Linux)) id 1evQgo-0000zK-IR; Mon, 12 Mar 2018 16:52:46 +0000 Received: from fllnx210.ext.ti.com ([198.47.19.17]) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1evQgl-0000xf-7D for linux-arm-kernel@lists.infradead.org; Mon, 12 Mar 2018 16:52:45 +0000 Received: from dflxv15.itg.ti.com ([128.247.5.124]) by fllnx210.ext.ti.com (8.15.1/8.15.1) with ESMTP id w2CGq9hC010764; Mon, 12 Mar 2018 11:52:09 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ti.com; s=ti-com-17Q1; t=1520873529; bh=lrimqyfLd4CpHVfuIkmuouYwxHxhMaCQFlBKj2/1Bpo=; h=From:To:CC:Subject:Date; b=aN9W4tr3aqXwwTMM3ZmCJKKDkN/PuWSBMLnCPSwiwhwCGKX51me2ximjx0iTqxQ4i iyiyIdqhrmAXYBvrWE7Jp3mNMdwXUysyib11Vj8IR4YMgGwHdnmTlR1cMuZg8nn6Or AqmTYp6br1qx9IZNlOmy48DDxQlc0C+TfI5GvtjI= Received: from DLEE113.ent.ti.com (dlee113.ent.ti.com [157.170.170.24]) by dflxv15.itg.ti.com (8.14.3/8.13.8) with ESMTP id w2CGq9vC020585; Mon, 12 Mar 2018 11:52:09 -0500 Received: from DLEE100.ent.ti.com (157.170.170.30) by DLEE113.ent.ti.com (157.170.170.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1261.35; Mon, 12 Mar 2018 11:52:08 -0500 Received: from dlep33.itg.ti.com (157.170.170.75) by DLEE100.ent.ti.com (157.170.170.30) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1261.35 via Frontend Transport; Mon, 12 Mar 2018 11:52:09 -0500 Received: from legion.dal.design.ti.com (legion.dal.design.ti.com [128.247.22.53]) by dlep33.itg.ti.com (8.14.3/8.13.8) with ESMTP id w2CGq8ew014498; Mon, 12 Mar 2018 11:52:08 -0500 Received: from localhost (irmo.dhcp.ti.com [128.247.58.153]) by legion.dal.design.ti.com (8.11.7p1+Sun/8.11.7) with ESMTP id w2CGq8x15943; Mon, 12 Mar 2018 11:52:08 -0500 (CDT) From: Suman Anna To: Laurent Pinchart , Mauro Carvalho Chehab Subject: [PATCH] media: omap3isp: fix unbalanced dma_iommu_mapping Date: Mon, 12 Mar 2018 11:52:07 -0500 Message-ID: <20180312165207.12436-1-s-anna@ti.com> X-Mailer: git-send-email 2.16.2 MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180312_095243_353370_A253251A X-CRM114-Status: GOOD ( 18.56 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tony Lindgren , Sakari Ailus , Pavel Machek , linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP The OMAP3 ISP driver manages its MMU mappings through the IOMMU-aware ARM DMA backend. The current code creates a dma_iommu_mapping and attaches this to the ISP device, but never detaches the mapping in either the probe failure paths or the driver remove path resulting in an unbalanced mapping refcount and a memory leak. Fix this properly. Reported-by: Pavel Machek Signed-off-by: Suman Anna Tested-by: Pavel Machek Acked-by: Sakari Ailus --- Hi Mauro, Laurent, This fixes an issue reported by Pavel and discussed on this thread, https://marc.info/?l=linux-omap&m=152051945803598&w=2 Posting this again to the appropriate lists. regards Suman drivers/media/platform/omap3isp/isp.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c index 8eb000e3d8fd..c7d667bfc2af 100644 --- a/drivers/media/platform/omap3isp/isp.c +++ b/drivers/media/platform/omap3isp/isp.c @@ -1945,6 +1945,7 @@ static int isp_initialize_modules(struct isp_device *isp) static void isp_detach_iommu(struct isp_device *isp) { + arm_iommu_detach_device(isp->dev); arm_iommu_release_mapping(isp->mapping); isp->mapping = NULL; } @@ -1971,13 +1972,15 @@ static int isp_attach_iommu(struct isp_device *isp) ret = arm_iommu_attach_device(isp->dev, mapping); if (ret < 0) { dev_err(isp->dev, "failed to attach device to VA mapping\n"); - goto error; + goto error_attach; } return 0; +error_attach: + arm_iommu_release_mapping(isp->mapping); + isp->mapping = NULL; error: - isp_detach_iommu(isp); return ret; }