lkml.org 
[lkml]   [2020]   [Sep]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 36/49] drm/mediatek: Add missing put_device() call in mtk_hdmi_dt_parse_pdata()
    Date
    From: Yu Kuai <yukuai3@huawei.com>

    [ Upstream commit 0680a622318b8d657323b94082f4b9a44038dfee ]

    if of_find_device_by_node() succeed, mtk_drm_kms_init() doesn't have
    a corresponding put_device(). Thus add jump target to fix the exception
    handling for this function implementation.

    Fixes: 8f83f26891e1 ("drm/mediatek: Add HDMI support")
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/mediatek/mtk_hdmi.c | 26 ++++++++++++++++++--------
    1 file changed, 18 insertions(+), 8 deletions(-)

    diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c
    index 62444a3a5742a..331fb0c129290 100644
    --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c
    +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c
    @@ -1476,25 +1476,30 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
    dev_err(dev,
    "Failed to get system configuration registers: %d\n",
    ret);
    - return ret;
    + goto put_device;
    }
    hdmi->sys_regmap = regmap;

    mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
    hdmi->regs = devm_ioremap_resource(dev, mem);
    - if (IS_ERR(hdmi->regs))
    - return PTR_ERR(hdmi->regs);
    + if (IS_ERR(hdmi->regs)) {
    + ret = PTR_ERR(hdmi->regs);
    + goto put_device;
    + }

    remote = of_graph_get_remote_node(np, 1, 0);
    - if (!remote)
    - return -EINVAL;
    + if (!remote) {
    + ret = -EINVAL;
    + goto put_device;
    + }

    if (!of_device_is_compatible(remote, "hdmi-connector")) {
    hdmi->next_bridge = of_drm_find_bridge(remote);
    if (!hdmi->next_bridge) {
    dev_err(dev, "Waiting for external bridge\n");
    of_node_put(remote);
    - return -EPROBE_DEFER;
    + ret = -EPROBE_DEFER;
    + goto put_device;
    }
    }

    @@ -1503,7 +1508,8 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
    dev_err(dev, "Failed to find ddc-i2c-bus node in %pOF\n",
    remote);
    of_node_put(remote);
    - return -EINVAL;
    + ret = -EINVAL;
    + goto put_device;
    }
    of_node_put(remote);

    @@ -1511,10 +1517,14 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
    of_node_put(i2c_np);
    if (!hdmi->ddc_adpt) {
    dev_err(dev, "Failed to get ddc i2c adapter by node\n");
    - return -EINVAL;
    + ret = -EINVAL;
    + goto put_device;
    }

    return 0;
    +put_device:
    + put_device(hdmi->cec_dev);
    + return ret;
    }

    /*
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-09-21 18:42    [W:3.824 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site