lkml.org 
[lkml]   [2020]   [Sep]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.8 039/255] omapfb: fix multiple reference count leaks due to pm_runtime_get_sync
    Date
    From: Aditya Pakki <pakki001@umn.edu>

    [ Upstream commit 78c2ce9bde70be5be7e3615a2ae7024ed8173087 ]

    On calling pm_runtime_get_sync() the reference count of the device
    is incremented. In case of failure, decrement the
    reference count before returning the error.

    Signed-off-by: Aditya Pakki <pakki001@umn.edu>
    Cc: kjlu@umn.edu
    Cc: wu000273@umn.edu
    Cc: Allison Randal <allison@lohutok.net>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Enrico Weigelt <info@metux.net>
    cc: "Andrew F. Davis" <afd@ti.com>
    Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
    Cc: Alexios Zavras <alexios.zavras@intel.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: YueHaibing <yuehaibing@huawei.com>
    Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20200614030528.128064-1-pakki001@umn.edu
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/video/fbdev/omap2/omapfb/dss/dispc.c | 7 +++++--
    drivers/video/fbdev/omap2/omapfb/dss/dsi.c | 7 +++++--
    drivers/video/fbdev/omap2/omapfb/dss/dss.c | 7 +++++--
    drivers/video/fbdev/omap2/omapfb/dss/hdmi4.c | 5 +++--
    drivers/video/fbdev/omap2/omapfb/dss/hdmi5.c | 5 +++--
    drivers/video/fbdev/omap2/omapfb/dss/venc.c | 7 +++++--
    6 files changed, 26 insertions(+), 12 deletions(-)

    diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dispc.c b/drivers/video/fbdev/omap2/omapfb/dss/dispc.c
    index 4a16798b2ecd8..e2b572761bf61 100644
    --- a/drivers/video/fbdev/omap2/omapfb/dss/dispc.c
    +++ b/drivers/video/fbdev/omap2/omapfb/dss/dispc.c
    @@ -520,8 +520,11 @@ int dispc_runtime_get(void)
    DSSDBG("dispc_runtime_get\n");

    r = pm_runtime_get_sync(&dispc.pdev->dev);
    - WARN_ON(r < 0);
    - return r < 0 ? r : 0;
    + if (WARN_ON(r < 0)) {
    + pm_runtime_put_sync(&dispc.pdev->dev);
    + return r;
    + }
    + return 0;
    }
    EXPORT_SYMBOL(dispc_runtime_get);

    diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dsi.c b/drivers/video/fbdev/omap2/omapfb/dss/dsi.c
    index d620376216e1d..6f9c25fec9946 100644
    --- a/drivers/video/fbdev/omap2/omapfb/dss/dsi.c
    +++ b/drivers/video/fbdev/omap2/omapfb/dss/dsi.c
    @@ -1137,8 +1137,11 @@ static int dsi_runtime_get(struct platform_device *dsidev)
    DSSDBG("dsi_runtime_get\n");

    r = pm_runtime_get_sync(&dsi->pdev->dev);
    - WARN_ON(r < 0);
    - return r < 0 ? r : 0;
    + if (WARN_ON(r < 0)) {
    + pm_runtime_put_sync(&dsi->pdev->dev);
    + return r;
    + }
    + return 0;
    }

    static void dsi_runtime_put(struct platform_device *dsidev)
    diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dss.c b/drivers/video/fbdev/omap2/omapfb/dss/dss.c
    index bfc5c4c5a26ad..a6b1c1598040d 100644
    --- a/drivers/video/fbdev/omap2/omapfb/dss/dss.c
    +++ b/drivers/video/fbdev/omap2/omapfb/dss/dss.c
    @@ -768,8 +768,11 @@ int dss_runtime_get(void)
    DSSDBG("dss_runtime_get\n");

    r = pm_runtime_get_sync(&dss.pdev->dev);
    - WARN_ON(r < 0);
    - return r < 0 ? r : 0;
    + if (WARN_ON(r < 0)) {
    + pm_runtime_put_sync(&dss.pdev->dev);
    + return r;
    + }
    + return 0;
    }

    void dss_runtime_put(void)
    diff --git a/drivers/video/fbdev/omap2/omapfb/dss/hdmi4.c b/drivers/video/fbdev/omap2/omapfb/dss/hdmi4.c
    index 7060ae56c062c..4804aab342981 100644
    --- a/drivers/video/fbdev/omap2/omapfb/dss/hdmi4.c
    +++ b/drivers/video/fbdev/omap2/omapfb/dss/hdmi4.c
    @@ -39,9 +39,10 @@ static int hdmi_runtime_get(void)
    DSSDBG("hdmi_runtime_get\n");

    r = pm_runtime_get_sync(&hdmi.pdev->dev);
    - WARN_ON(r < 0);
    - if (r < 0)
    + if (WARN_ON(r < 0)) {
    + pm_runtime_put_sync(&hdmi.pdev->dev);
    return r;
    + }

    return 0;
    }
    diff --git a/drivers/video/fbdev/omap2/omapfb/dss/hdmi5.c b/drivers/video/fbdev/omap2/omapfb/dss/hdmi5.c
    index ac49531e47327..a06b6f1355bdb 100644
    --- a/drivers/video/fbdev/omap2/omapfb/dss/hdmi5.c
    +++ b/drivers/video/fbdev/omap2/omapfb/dss/hdmi5.c
    @@ -43,9 +43,10 @@ static int hdmi_runtime_get(void)
    DSSDBG("hdmi_runtime_get\n");

    r = pm_runtime_get_sync(&hdmi.pdev->dev);
    - WARN_ON(r < 0);
    - if (r < 0)
    + if (WARN_ON(r < 0)) {
    + pm_runtime_put_sync(&hdmi.pdev->dev);
    return r;
    + }

    return 0;
    }
    diff --git a/drivers/video/fbdev/omap2/omapfb/dss/venc.c b/drivers/video/fbdev/omap2/omapfb/dss/venc.c
    index d5404d56c922f..0b0ad20afd630 100644
    --- a/drivers/video/fbdev/omap2/omapfb/dss/venc.c
    +++ b/drivers/video/fbdev/omap2/omapfb/dss/venc.c
    @@ -348,8 +348,11 @@ static int venc_runtime_get(void)
    DSSDBG("venc_runtime_get\n");

    r = pm_runtime_get_sync(&venc.pdev->dev);
    - WARN_ON(r < 0);
    - return r < 0 ? r : 0;
    + if (WARN_ON(r < 0)) {
    + pm_runtime_put_sync(&venc.pdev->dev);
    + return r;
    + }
    + return 0;
    }

    static void venc_runtime_put(void)
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-09-01 17:39    [W:3.015 / U:0.268 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site