media: platform: mtk-mdp3: fix error handling in mdp_probe()
authorMoudy Ho <moudy.ho@mediatek.com>
Thu, 20 Oct 2022 07:18:00 +0000 (15:18 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 31 Dec 2022 12:32:08 +0000 (13:32 +0100)
[ Upstream commit 82b7d4b5d393d6654148e885efca0a3df63806f6 ]

Adjust label "err_return" order to avoid double freeing, and
add two labels for easy traceability.

Fixes: 61890ccaefaf ("media: platform: mtk-mdp3: add MediaTek MDP3 driver")
Signed-off-by: Moudy Ho <moudy.ho@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c

index c413e59..2d1f6ae 100644 (file)
@@ -196,27 +196,27 @@ static int mdp_probe(struct platform_device *pdev)
        mm_pdev = __get_pdev_by_id(pdev, MDP_INFRA_MMSYS);
        if (!mm_pdev) {
                ret = -ENODEV;
-               goto err_return;
+               goto err_destroy_device;
        }
        mdp->mdp_mmsys = &mm_pdev->dev;
 
        mm_pdev = __get_pdev_by_id(pdev, MDP_INFRA_MUTEX);
        if (WARN_ON(!mm_pdev)) {
                ret = -ENODEV;
-               goto err_return;
+               goto err_destroy_device;
        }
        for (i = 0; i < MDP_PIPE_MAX; i++) {
                mdp->mdp_mutex[i] = mtk_mutex_get(&mm_pdev->dev);
                if (!mdp->mdp_mutex[i]) {
                        ret = -ENODEV;
-                       goto err_return;
+                       goto err_free_mutex;
                }
        }
 
        ret = mdp_comp_config(mdp);
        if (ret) {
                dev_err(dev, "Failed to config mdp components\n");
-               goto err_return;
+               goto err_free_mutex;
        }
 
        mdp->job_wq = alloc_workqueue(MDP_MODULE_NAME, WQ_FREEZABLE, 0);
@@ -287,11 +287,12 @@ err_destroy_job_wq:
        destroy_workqueue(mdp->job_wq);
 err_deinit_comp:
        mdp_comp_destroy(mdp);
-err_return:
+err_free_mutex:
        for (i = 0; i < MDP_PIPE_MAX; i++)
-               if (mdp)
-                       mtk_mutex_put(mdp->mdp_mutex[i]);
+               mtk_mutex_put(mdp->mdp_mutex[i]);
+err_destroy_device:
        kfree(mdp);
+err_return:
        dev_dbg(dev, "Errno %d\n", ret);
        return ret;
 }