From: John Keeping Date: Tue, 5 Apr 2016 13:50:32 +0000 (+0100) Subject: UPSTREAM: drm/rockchip: don't leak iommu mapping X-Git-Tag: firefly_0821_release~1143 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e680ec3a1348e6cefddd1db6ba257725772b90a4;p=firefly-linux-kernel-4.4.55.git UPSTREAM: drm/rockchip: don't leak iommu mapping arm_iommu_attach_device() takes its own reference to the mapping we give it. Since we do not keep a reference to the mapping ourselves, we must release it before returning. Also fix the error path, which fails to release the mapping if it has called arm_iommu_detach_device() since that clears archdata.mapping. Conflicts: drivers/gpu/drm/rockchip/rockchip_drm_drv.c Change-Id: Ia20334afbce08ece5a3238a7b0786547ec0cafb2 Signed-off-by: John Keeping Signed-off-by: Randy Li Signed-off-by: Huang, Tao (cherry picked from commit 69b007968e7519cf1e44920f4578054c9e0fbdc3) --- diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c index 86382b7965d5..04081b3784dc 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c @@ -797,6 +797,7 @@ static int rockchip_drm_load(struct drm_device *drm_dev, unsigned long flags) drm_dev->mode_config.allow_fb_modifiers = true; + arm_iommu_release_mapping(mapping); return 0; err_vblank_cleanup: drm_vblank_cleanup(drm_dev); @@ -807,7 +808,7 @@ err_unbind: err_detach_device: arm_iommu_detach_device(dev); err_release_mapping: - arm_iommu_release_mapping(dev->archdata.mapping); + arm_iommu_release_mapping(mapping); err_config_cleanup: drm_mode_config_cleanup(drm_dev); drm_dev->dev_private = NULL;