Message ID | 20220421234240.1694-4-laurent.pinchart@ideasonboard.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | media: rkisp1: Misc bug fixes and cleanups | expand |
Laurent Pinchart wrote: > The rkisp1_isp_register() and rkisp1_isp_unregister() functions don't > destroy the mutex (in the error path for the former). Fix this, simplify > error handling at registration time as media_entity_cleanup() can be > called on an uninitialized entity, and make rkisp1_isp_unregister() and > safe to be called on an unregistered isp subdev to prepare for > simplification of error handling at probe time. > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Ricardo Ribalda <ribalda@chromium.org> > --- > Changes since v3: > > - Use isp->sd.v4l2_dev instead of isp->sd.flags for registration test > --- > .../platform/rockchip/rkisp1/rkisp1-isp.c | 20 ++++++++++++------- > 1 file changed, 13 insertions(+), 7 deletions(-) > > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c > index 2a35bf24e54e..4f7b2157b8cc 100644 > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c > @@ -1090,29 +1090,35 @@ int rkisp1_isp_register(struct rkisp1_device *rkisp1) > mutex_init(&isp->ops_lock); > ret = media_entity_pads_init(&sd->entity, RKISP1_ISP_PAD_MAX, pads); > if (ret) > - return ret; > + goto error; > > ret = v4l2_device_register_subdev(&rkisp1->v4l2_dev, sd); > if (ret) { > dev_err(rkisp1->dev, "Failed to register isp subdev\n"); > - goto err_cleanup_media_entity; > + goto error; > } > > rkisp1_isp_init_config(sd, &state); > + > return 0; > > -err_cleanup_media_entity: > +error: > media_entity_cleanup(&sd->entity); > - > + mutex_destroy(&isp->ops_lock); > + isp->sd.v4l2_dev = NULL; > return ret; > } > > void rkisp1_isp_unregister(struct rkisp1_device *rkisp1) > { > - struct v4l2_subdev *sd = &rkisp1->isp.sd; > + struct rkisp1_isp *isp = &rkisp1->isp; > > - v4l2_device_unregister_subdev(sd); > - media_entity_cleanup(&sd->entity); > + if (!isp->sd.v4l2_dev) > + return; > + > + v4l2_device_unregister_subdev(&isp->sd); > + media_entity_cleanup(&isp->sd.entity); > + mutex_destroy(&isp->ops_lock); > } > > /* ---------------------------------------------------------------------------- > -- > Regards, > > Laurent Pinchart > >
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c index 2a35bf24e54e..4f7b2157b8cc 100644 --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c @@ -1090,29 +1090,35 @@ int rkisp1_isp_register(struct rkisp1_device *rkisp1) mutex_init(&isp->ops_lock); ret = media_entity_pads_init(&sd->entity, RKISP1_ISP_PAD_MAX, pads); if (ret) - return ret; + goto error; ret = v4l2_device_register_subdev(&rkisp1->v4l2_dev, sd); if (ret) { dev_err(rkisp1->dev, "Failed to register isp subdev\n"); - goto err_cleanup_media_entity; + goto error; } rkisp1_isp_init_config(sd, &state); + return 0; -err_cleanup_media_entity: +error: media_entity_cleanup(&sd->entity); - + mutex_destroy(&isp->ops_lock); + isp->sd.v4l2_dev = NULL; return ret; } void rkisp1_isp_unregister(struct rkisp1_device *rkisp1) { - struct v4l2_subdev *sd = &rkisp1->isp.sd; + struct rkisp1_isp *isp = &rkisp1->isp; - v4l2_device_unregister_subdev(sd); - media_entity_cleanup(&sd->entity); + if (!isp->sd.v4l2_dev) + return; + + v4l2_device_unregister_subdev(&isp->sd); + media_entity_cleanup(&isp->sd.entity); + mutex_destroy(&isp->ops_lock); } /* ----------------------------------------------------------------------------
The rkisp1_isp_register() and rkisp1_isp_unregister() functions don't destroy the mutex (in the error path for the former). Fix this, simplify error handling at registration time as media_entity_cleanup() can be called on an uninitialized entity, and make rkisp1_isp_unregister() and safe to be called on an unregistered isp subdev to prepare for simplification of error handling at probe time. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- Changes since v3: - Use isp->sd.v4l2_dev instead of isp->sd.flags for registration test --- .../platform/rockchip/rkisp1/rkisp1-isp.c | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-)