Re: [PATCH v2 01/10] media: v4l2-ctrls: Add missing v4l2 ctrl unlock
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> --- > 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
Re: [PATCH v2 01/10] media: v4l2-ctrls: Add missing v4l2 ctrl unlock
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> --- > 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 -- Maxime Ripard, Bootlin (formerly Free Electrons) Embedded Linux and Kernel engineering https://bootlin.com signature.asc Description: PGP signature
[PATCH v2 01/10] media: v4l2-ctrls: Add missing v4l2 ctrl unlock
This adds a missing v4l2_ctrl_unlock call that is required to avoid deadlocks. Signed-off-by: Paul Kocialkowski--- 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; + } for (i = 0; i < master->ncontrols; i++) { if (master->cluster[i]) { -- 2.16.3