From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v2] media: omap3isp: fix unbalanced dma_iommu_mapping Date: Wed, 21 Mar 2018 12:26:42 +0200 Message-ID: <5767280.aLITpzbm0N@avalon> References: <20180314154136.16468-1-s-anna@ti.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20180314154136.16468-1-s-anna@ti.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Suman Anna Cc: Mauro Carvalho Chehab , Tony Lindgren , Sakari Ailus , Pavel Machek , linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org List-Id: linux-omap@vger.kernel.org Hi Suman, Thank you for the patch. On Wednesday, 14 March 2018 17:41:36 EET Suman Anna wrote: > 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 > Acked-by: Sakari Ailus Reviewed-by: Laurent Pinchart > --- > v2 Changes: > - Dropped the error_attach label, and returned directly from the > first error path (comments from Sakari) > - Added Sakari's Acked-by > v1: https://patchwork.kernel.org/patch/10276759/ > > Pavel, > I dropped your Tested-by from v2 since I modified the patch, can you > recheck the new patch again? Thanks. > > regards > Suman > > drivers/media/platform/omap3isp/isp.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/drivers/media/platform/omap3isp/isp.c > b/drivers/media/platform/omap3isp/isp.c index 8eb000e3d8fd..f2db5128d786 > 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; > } > @@ -1961,8 +1962,7 @@ static int isp_attach_iommu(struct isp_device *isp) > mapping = arm_iommu_create_mapping(&platform_bus_type, SZ_1G, SZ_2G); > if (IS_ERR(mapping)) { > dev_err(isp->dev, "failed to create ARM IOMMU mapping\n"); > - ret = PTR_ERR(mapping); > - goto error; > + return PTR_ERR(mapping); > } > > isp->mapping = mapping; > @@ -1977,7 +1977,8 @@ static int isp_attach_iommu(struct isp_device *isp) > return 0; > > error: > - isp_detach_iommu(isp); > + arm_iommu_release_mapping(isp->mapping); > + isp->mapping = NULL; > return ret; > } -- Regards, Laurent Pinchart