[PATCH] media: chips-media: wave5: Release m2m devices if video registration fails
From: Wentao Liang
Date: Tue Nov 03 2026 - 03:50:09 EST
The encoder and decoder registration helpers allocate a v4l2_m2m_dev
before registering their video device. When video_register_device()
fails, both helpers return without releasing the m2m device. The probe
error path only unregisters codecs that were successfully registered,
so it does not call the failing codec's unregister helper either.
Release the m2m device before returning the registration error and clear
its pointer. This balances v4l2_m2m_init() for both codecs without
unregistering a video device whose registration failed.
Fixes: 9707a6254a8a ("media: chips-media: wave5: Add the v4l2 layer")
Cc: stable@xxxxxxxxxxxxxxx
Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex
Signed-off-by: Wentao Liang <vulab@xxxxxxxxxxx>
---
drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c | 5 ++++-
drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c | 5 ++++-
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c b/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c
index 86bc36ee17fd..929ad9cfb674 100644
--- a/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c
+++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c
@@ -2051,8 +2051,11 @@ int wave5_vpu_dec_register_device(struct vpu_device *dev)
vdev_dec->lock = &dev->dev_lock;
ret = video_register_device(vdev_dec, VFL_TYPE_VIDEO, -1);
- if (ret)
+ if (ret) {
+ v4l2_m2m_release(dev->v4l2_m2m_dec_dev);
+ dev->v4l2_m2m_dec_dev = NULL;
return ret;
+ }
video_set_drvdata(vdev_dec, dev);
diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
index f9fcdf4c224b..6577028201ae 100644
--- a/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
+++ b/drivers/media/platform/chips-media/wave5/wave5-vpu-enc.c
@@ -1854,8 +1854,11 @@ int wave5_vpu_enc_register_device(struct vpu_device *dev)
vdev_enc->lock = &dev->dev_lock;
ret = video_register_device(vdev_enc, VFL_TYPE_VIDEO, -1);
- if (ret)
+ if (ret) {
+ v4l2_m2m_release(dev->v4l2_m2m_enc_dev);
+ dev->v4l2_m2m_enc_dev = NULL;
return ret;
+ }
video_set_drvdata(vdev_enc, dev);
--
2.34.1