]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
media: tegra_camera: free syncpts when probing fails
authorBryan Wu <pengw@nvidia.com>
Wed, 2 Apr 2014 20:40:19 +0000 (13:40 -0700)
committerSachin Nikam <snikam@nvidia.com>
Fri, 4 Apr 2014 05:50:18 +0000 (22:50 -0700)
If driver probing fails, syncpts need to be freed for further use.
Otherwise it will cause syncpts leak.

Bug 1489488

Change-Id: I6f1ae10087b007c7f4814733e0e8f8b60c315fd6
Signed-off-by: Bryan Wu <pengw@nvidia.com>
Reviewed-on: http://git-master/r/391488
Reviewed-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-by: Sachin Nikam <snikam@nvidia.com>
drivers/media/platform/soc_camera/tegra_camera/common.c

index 8ed262da1cf6393f1a0d0abecf4e6631681dcee8..f0a250678cca0eb58b7c3383c0c61a657257ede9 100644 (file)
@@ -890,7 +890,7 @@ static int tegra_camera_probe(struct platform_device *pdev)
                dev_err(&pdev->dev, "%s: failed to map register base\n",
                                __func__);
                err = -ENXIO;
-               goto exit_deinit_clk;
+               goto exit_free_syncpts;
        }
 
        nvhost_module_init(pdev);
@@ -899,13 +899,13 @@ static int tegra_camera_probe(struct platform_device *pdev)
        if (err) {
                dev_err(&pdev->dev, "%s: nvhost init failed %d\n",
                                __func__, err);
-               goto exit_deinit_clk;
+               goto exit_free_syncpts;
        }
 
        cam->alloc_ctx = vb2_dma_contig_init_ctx(&pdev->dev);
        if (IS_ERR(cam->alloc_ctx)) {
                err = PTR_ERR(cam->alloc_ctx);
-               goto exit_deinit_clk;
+               goto exit_free_syncpts;
        }
 
        platform_set_drvdata(pdev, cam);
@@ -920,6 +920,8 @@ static int tegra_camera_probe(struct platform_device *pdev)
 exit_cleanup_alloc_ctx:
        platform_set_drvdata(pdev, cam->ndata);
        vb2_dma_contig_cleanup_ctx(cam->alloc_ctx);
+exit_free_syncpts:
+       cam->ops->free_syncpts(cam);
 exit_deinit_clk:
        cam->ops->clks_deinit(cam);
        kfree(cam);