summaryrefslogtreecommitdiff
path: root/drivers/media
diff options
context:
space:
mode:
authorMing Qian <ming.qian@nxp.com>2022-03-14 06:28:55 +0100
committerMauro Carvalho Chehab <mchehab@kernel.org>2022-03-18 07:32:40 +0100
commit47aa866f248c89b319b99ac7b21a0a961ed2264a (patch)
tree1183f65a5b238050cafc0cd76fc312bbce8f7b89 /drivers/media
parenta9f7224c67b3357e6585e6ddbcabd0523ca0f39f (diff)
media: amphion: cleanup media device if register it fail
there is issue that driver forget to call media_device_cleanup if media_device_register fail, it will led to memory leak. Also driver should check the return value of vpu_add_func. Signed-off-by: Ming Qian <ming.qian@nxp.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/platform/amphion/vpu_drv.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/media/platform/amphion/vpu_drv.c b/drivers/media/platform/amphion/vpu_drv.c
index f19f823d4b8c..9d5a5075343d 100644
--- a/drivers/media/platform/amphion/vpu_drv.c
+++ b/drivers/media/platform/amphion/vpu_drv.c
@@ -128,8 +128,12 @@ static int vpu_probe(struct platform_device *pdev)
vpu->encoder.function = MEDIA_ENT_F_PROC_VIDEO_ENCODER;
vpu->decoder.type = VPU_CORE_TYPE_DEC;
vpu->decoder.function = MEDIA_ENT_F_PROC_VIDEO_DECODER;
- vpu_add_func(vpu, &vpu->decoder);
- vpu_add_func(vpu, &vpu->encoder);
+ ret = vpu_add_func(vpu, &vpu->decoder);
+ if (ret)
+ goto err_add_decoder;
+ ret = vpu_add_func(vpu, &vpu->encoder);
+ if (ret)
+ goto err_add_encoder;
ret = media_device_register(&vpu->mdev);
if (ret)
goto err_vpu_media;
@@ -141,7 +145,10 @@ static int vpu_probe(struct platform_device *pdev)
err_vpu_media:
vpu_remove_func(&vpu->encoder);
+err_add_encoder:
vpu_remove_func(&vpu->decoder);
+err_add_decoder:
+ media_device_cleanup(&vpu->mdev);
v4l2_device_unregister(&vpu->v4l2_dev);
err_vpu_deinit:
pm_runtime_set_suspended(dev);