media: cedrus: fix reference leak in cedrus_start_streaming
authorZhang Qilong <zhangqilong3@huawei.com>
Mon, 2 Nov 2020 14:26:22 +0000 (15:26 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Mon, 16 Nov 2020 09:31:16 +0000 (10:31 +0100)
pm_runtime_get_sync will increment pm usage counter even it
failed. Forgetting to pm_runtime_put_noidle will result in
reference leak in cedrus_start_streaming. We should fix it.

Fixes: d5aecd289babf ("media: cedrus: Implement runtime PM")
Signed-off-by: Zhang Qilong <zhangqilong3@huawei.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/staging/media/sunxi/cedrus/cedrus_video.c

index 667b86d..911f607 100644 (file)
@@ -479,8 +479,10 @@ static int cedrus_start_streaming(struct vb2_queue *vq, unsigned int count)
 
        if (V4L2_TYPE_IS_OUTPUT(vq->type)) {
                ret = pm_runtime_get_sync(dev->dev);
-               if (ret < 0)
+               if (ret < 0) {
+                       pm_runtime_put_noidle(dev->dev);
                        goto err_cleanup;
+               }
 
                if (dev->dec_ops[ctx->current_codec]->start) {
                        ret = dev->dec_ops[ctx->current_codec]->start(ctx);