mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-13 05:54:23 +08:00
drm/omap: Fix runtime PM imbalance on error
pm_runtime_get_sync() increments the runtime PM usage counter even when it returns an error code. However, users of its direct wrappers in omapdrm assume that PM usage counter will not change on error. Thus a pairing decrement is needed on the error handling path for these wrappers to keep the counter balanced. Signed-off-by: Dinghao Liu <dinghao.liu@zju.edu.cn> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200822065743.13671-1-dinghao.liu@zju.edu.cn
This commit is contained in:
parent
1b409fda60
commit
a5d704d332
@ -653,8 +653,11 @@ int dispc_runtime_get(struct dispc_device *dispc)
|
||||
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_noidle(&dispc->pdev->dev);
|
||||
return r;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void dispc_runtime_put(struct dispc_device *dispc)
|
||||
|
@ -1112,8 +1112,11 @@ static int dsi_runtime_get(struct dsi_data *dsi)
|
||||
DSSDBG("dsi_runtime_get\n");
|
||||
|
||||
r = pm_runtime_get_sync(dsi->dev);
|
||||
WARN_ON(r < 0);
|
||||
return r < 0 ? r : 0;
|
||||
if (WARN_ON(r < 0)) {
|
||||
pm_runtime_put_noidle(dsi->dev);
|
||||
return r;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void dsi_runtime_put(struct dsi_data *dsi)
|
||||
|
@ -858,8 +858,11 @@ int dss_runtime_get(struct dss_device *dss)
|
||||
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_noidle(&dss->pdev->dev);
|
||||
return r;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void dss_runtime_put(struct dss_device *dss)
|
||||
|
@ -43,10 +43,10 @@ static int hdmi_runtime_get(struct omap_hdmi *hdmi)
|
||||
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_noidle(&hdmi->pdev->dev);
|
||||
return r;
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -44,10 +44,10 @@ static int hdmi_runtime_get(struct omap_hdmi *hdmi)
|
||||
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_noidle(&hdmi->pdev->dev);
|
||||
return r;
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -361,8 +361,11 @@ static int venc_runtime_get(struct venc_device *venc)
|
||||
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_noidle(&venc->pdev->dev);
|
||||
return r;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void venc_runtime_put(struct venc_device *venc)
|
||||
|
Loading…
Reference in New Issue
Block a user