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@vger.kernel.org Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex Signed-off-by: Wentao Liang --- 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