[PATCH 2/3] media: platform: mtk-mdp3: fix PM reference leak in mdp_comp_clock_on()

Sun Ke sunke32 at huawei.com
Thu Sep 22 23:25:05 PDT 2022


ping...

在 2022/9/2 16:58, Sun Ke 写道:
> mdp_comp_clock_on will increase runtime PM usage counter,
> and mdp_comp_clock_off will decrease the runtime PM usage counter.
> so, if mdp_comp_clock_on failed after increment runtime PM usage
> counter, it should decrease it before return a error code.
> 
> pm_runtime_get_sync will increment pm usage counter even it failed.
> Forgetting to putting operation will result in reference leak here.
> Fix it by replacing it with pm_runtime_resume_and_get to keep usage
> counter balanced.
> 
> And if failed to enable clk, add pm_runtime_put() to decrease the
> runtime PM usage counter.
> 
> Fixes: 61890ccaefaf ("media: platform: mtk-mdp3: add MediaTek MDP3 driver")
> Signed-off-by: Sun Ke <sunke32 at huawei.com>
> ---
>   drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c
> index 9a6ba5851ccb..d3eaf8884412 100644
> --- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c
> +++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c
> @@ -682,7 +682,7 @@ int mdp_comp_clock_on(struct device *dev, struct mdp_comp *comp)
>   	int i, ret;
>   
>   	if (comp->comp_dev) {
> -		ret = pm_runtime_get_sync(comp->comp_dev);
> +		ret = pm_runtime_resume_and_get(comp->comp_dev);
>   		if (ret < 0) {
>   			dev_err(dev,
>   				"Failed to get power, err %d. type:%d id:%d\n",
> @@ -699,6 +699,7 @@ int mdp_comp_clock_on(struct device *dev, struct mdp_comp *comp)
>   			dev_err(dev,
>   				"Failed to enable clk %d. type:%d id:%d\n",
>   				i, comp->type, comp->id);
> +			pm_runtime_put(comp->comp_dev);
>   			return ret;
>   		}
>   	}
> 



More information about the Linux-mediatek mailing list