]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: venus: core: Fix error handling in probe
authorRajendra Nayak <rnayak@codeaurora.org>
Wed, 29 Jul 2020 07:16:42 +0000 (09:16 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 29 Oct 2020 09:08:20 +0000 (10:08 +0100)
[ Upstream commit 98cd831088c64aa8fe7e1d2a8bb94b6faba0462b ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/platform/qcom/venus/core.c

index 203c6538044fb440b0d4e98999354a9f92f77ee1..bfcaba37d60fe31c78b1085d24cceda767e4a0f4 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);
 
@@ -302,6 +304,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;
 }