drm/msm/dpu: Avoid calling _dpu_kms_mmu_destroy() on init failure
authorSean Paul <seanpaul@chromium.org>
Mon, 17 Jun 2019 20:03:46 +0000 (16:03 -0400)
committerSean Paul <seanpaul@chromium.org>
Thu, 20 Jun 2019 18:41:56 +0000 (14:41 -0400)
Fix the error paths in _dpu_kms_mmu_init() to properly
clean up the iommu domain and not call _dpu_kms_mmu_destroy() when
things are only partially setup.

Reviewed-by: Rob Clark <robdclark@chromium.org>
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20190617200405.131843-2-sean@poorly.run
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c

index 4518e744c896289a0b02478a1bf1cd1be1e0d56b..435b846f9f52ba224cb18ad622be1e18b50bc9d4 100644 (file)
@@ -745,25 +745,20 @@ static int _dpu_kms_mmu_init(struct dpu_kms *dpu_kms)
        aspace = msm_gem_address_space_create(dpu_kms->dev->dev,
                        domain, "dpu1");
        if (IS_ERR(aspace)) {
-               ret = PTR_ERR(aspace);
-               goto fail;
+               iommu_domain_free(domain);
+               return PTR_ERR(aspace);
        }
 
-       dpu_kms->base.aspace = aspace;
-
        ret = aspace->mmu->funcs->attach(aspace->mmu, iommu_ports,
                        ARRAY_SIZE(iommu_ports));
        if (ret) {
                DPU_ERROR("failed to attach iommu %d\n", ret);
                msm_gem_address_space_put(aspace);
-               goto fail;
+               return ret;
        }
 
+       dpu_kms->base.aspace = aspace;
        return 0;
-fail:
-       _dpu_kms_mmu_destroy(dpu_kms);
-
-       return ret;
 }
 
 static struct dss_clk *_dpu_kms_get_clk(struct dpu_kms *dpu_kms,