media: venus: core: Fix error handling in probe
authorRajendra Nayak <rnayak@codeaurora.org>
Wed, 29 Jul 2020 07:16:42 +0000 (09:16 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 18 Aug 2020 13:54:59 +0000 (15:54 +0200)
Post a successful pm_ops->core_get, an error in probe
should exit by doing a pm_ops->core_put which seems
to be missing. So fix it.

Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/platform/qcom/venus/core.c

index b0b932b..321ad77 100644 (file)
@@ -224,13 +224,15 @@ static int venus_probe(struct platform_device *pdev)
 
        ret = dma_set_mask_and_coherent(dev, core->res->dma_mask);
        if (ret)
-               return ret;
+               goto err_core_put;
 
        if (!dev->dma_parms) {
                dev->dma_parms = devm_kzalloc(dev, sizeof(*dev->dma_parms),
                                              GFP_KERNEL);
-               if (!dev->dma_parms)
-                       return -ENOMEM;
+               if (!dev->dma_parms) {
+                       ret = -ENOMEM;
+                       goto err_core_put;
+               }
        }
        dma_set_max_seg_size(dev, DMA_BIT_MASK(32));
 
@@ -242,11 +244,11 @@ static int venus_probe(struct platform_device *pdev)
                                        IRQF_TRIGGER_HIGH | IRQF_ONESHOT,
                                        "venus", core);
        if (ret)
-               return ret;
+               goto err_core_put;
 
        ret = hfi_create(core, &venus_core_ops);
        if (ret)
-               return ret;
+               goto err_core_put;
 
        pm_runtime_enable(dev);
 
@@ -305,6 +307,9 @@ err_runtime_disable:
        pm_runtime_set_suspended(dev);
        pm_runtime_disable(dev);
        hfi_destroy(core);
+err_core_put:
+       if (core->pm_ops->core_put)
+               core->pm_ops->core_put(dev);
        return ret;
 }