Message ID | 20180419154124.17512-2-paul.kocialkowski@bootlin.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Apr 19, 2018 at 05:41:15PM +0200, Paul Kocialkowski wrote: > This adds a missing v4l2_ctrl_unlock call that is required to avoid > deadlocks. Maybe you can explain what the deadlock scenario is? > Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> > --- > drivers/media/v4l2-core/v4l2-ctrls.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c > index f67e9f5531fa..ba05a8b9a095 100644 > --- a/drivers/media/v4l2-core/v4l2-ctrls.c > +++ b/drivers/media/v4l2-core/v4l2-ctrls.c > @@ -3614,10 +3614,12 @@ void v4l2_ctrl_request_complete(struct media_request *req, > continue; > > v4l2_ctrl_lock(ctrl); > + > if (ref->req) > ptr_to_ptr(ctrl, ref->req->p_req, ref->p_req); > else > ptr_to_ptr(ctrl, ctrl->p_cur, ref->p_req); > + I'm not sure that this is relevant in this patch. Maxime
On 04/19/18 17:41, Paul Kocialkowski wrote: > This adds a missing v4l2_ctrl_unlock call that is required to avoid > deadlocks. > > Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> > --- > drivers/media/v4l2-core/v4l2-ctrls.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c > index f67e9f5531fa..ba05a8b9a095 100644 > --- a/drivers/media/v4l2-core/v4l2-ctrls.c > +++ b/drivers/media/v4l2-core/v4l2-ctrls.c > @@ -3614,10 +3614,12 @@ void v4l2_ctrl_request_complete(struct media_request *req, > continue; > > v4l2_ctrl_lock(ctrl); > + > if (ref->req) > ptr_to_ptr(ctrl, ref->req->p_req, ref->p_req); > else > ptr_to_ptr(ctrl, ctrl->p_cur, ref->p_req); > + > v4l2_ctrl_unlock(ctrl); > } > > @@ -3677,8 +3679,11 @@ void v4l2_ctrl_request_setup(struct media_request *req, > } > } > } > - if (!have_new_data) > + > + if (!have_new_data) { > + v4l2_ctrl_unlock(master); > continue; > + } Oops! Thanks for finding this. I'll fold this into the relevant patch in my tree. > > for (i = 0; i < master->ncontrols; i++) { > if (master->cluster[i]) { > Regards, Hans
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c index f67e9f5531fa..ba05a8b9a095 100644 --- a/drivers/media/v4l2-core/v4l2-ctrls.c +++ b/drivers/media/v4l2-core/v4l2-ctrls.c @@ -3614,10 +3614,12 @@ void v4l2_ctrl_request_complete(struct media_request *req, continue; v4l2_ctrl_lock(ctrl); + if (ref->req) ptr_to_ptr(ctrl, ref->req->p_req, ref->p_req); else ptr_to_ptr(ctrl, ctrl->p_cur, ref->p_req); + v4l2_ctrl_unlock(ctrl); } @@ -3677,8 +3679,11 @@ void v4l2_ctrl_request_setup(struct media_request *req, } } } - if (!have_new_data) + + if (!have_new_data) { + v4l2_ctrl_unlock(master); continue; + } for (i = 0; i < master->ncontrols; i++) { if (master->cluster[i]) {
This adds a missing v4l2_ctrl_unlock call that is required to avoid deadlocks. Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> --- drivers/media/v4l2-core/v4l2-ctrls.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)