drm/rockchip: don't leak iommu mapping
authorJohn Keeping <john@metanate.com>
Tue, 5 Apr 2016 13:50:32 +0000 (14:50 +0100)
committerMark Yao <mark.yao@rock-chips.com>
Tue, 3 May 2016 06:11:22 +0000 (14:11 +0800)
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.

Signed-off-by: John Keeping <john@metanate.com>
drivers/gpu/drm/rockchip/rockchip_drm_drv.c

index 7695c791ad952a086db1fd32fdce992617c3f9ab..1e2d88bdd9f78ff4877f9925f6534c93e84e8342 100644 (file)
@@ -218,6 +218,7 @@ static int rockchip_drm_load(struct drm_device *drm_dev, unsigned long flags)
        if (ret)
                goto err_vblank_cleanup;
 
+       arm_iommu_release_mapping(mapping);
        return 0;
 err_vblank_cleanup:
        drm_vblank_cleanup(drm_dev);
@@ -228,7 +229,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;