From: Sylwester Nawrocki <sylvester.nawrocki@gmail.com>
To: Sakari Ailus <sakari.ailus@iki.fi>
Cc: Hans Verkuil <hverkuil@xs4all.nl>,
Andrzej Hajda <a.hajda@samsung.com>,
linux-media@vger.kernel.org,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
Sylwester Nawrocki <s.nawrocki@samsung.com>,
Kyungmin Park <kyungmin.park@samsung.com>,
hj210.choi@samsung.com, sw0312.kim@samsung.com
Subject: Re: [PATCH RFC v3 2/3] media: added managed v4l2 control initialization
Date: Sun, 09 Jun 2013 20:05:33 +0200 [thread overview]
Message-ID: <51B4C3ED.40006@gmail.com> (raw)
In-Reply-To: <20130606214107.GD3103@valkosipuli.retiisi.org.uk>
Hi Sakari,
On 06/06/2013 11:41 PM, Sakari Ailus wrote:
...
>>>>>> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
>>>>>> index ebb8e48..f47ccfa 100644
>>>>>> --- a/drivers/media/v4l2-core/v4l2-ctrls.c
>>>>>> +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
>>>>>> @@ -1421,6 +1421,38 @@ void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)
>>>>>> }
>>>>>> EXPORT_SYMBOL(v4l2_ctrl_handler_free);
>>>>>>
>>>>>> +static void devm_v4l2_ctrl_handler_release(struct device *dev, void *res)
>>>>>> +{
>>>>>> + struct v4l2_ctrl_handler **hdl = res;
>>>>>> +
>>>>>> + v4l2_ctrl_handler_free(*hdl);
>>>>>
>>>>> v4l2_ctrl_handler_free() acquires hdl->mutex which is independent of the
>>>>> existence of hdl. By default hdl->lock is in the handler, but it may also be
>>>>> elsewhere, e.g. in a driver-specific device struct such as struct
>>>>> smiapp_sensor defined in drivers/media/i2c/smiapp/smiapp.h. I wonder if
>>>>> anything guarantees that hdl->mutex still exists at the time the device is
>>>>> removed.
>>>>
>>>> If it is a driver-managed lock, then the driver should also be responsible for
>>>> that lock during the life-time of the control handler. I think that is a fair
>>>> assumption.
>>>
>>> Agreed.
>>>
>>>>> I have to say I don't think it's neither meaningful to acquire that mutex in
>>>>> v4l2_ctrl_handler_free(), though, since the whole going to be freed next
>>>>> anyway: reference counting would be needed to prevent bad things from
>>>>> happening, in case the drivers wouldn't take care of that.
>>>>
>>>> It's probably not meaningful today, but it might become meaningful in the
>>>> future. And in any case, not taking the lock when manipulating internal
>>>> lists is very unexpected even though it might work with today's use cases.
>>>
>>> I simply don't think it's meaningful to acquire a lock related to an
>>> object when that object is being destroyed. If something else was
>>> holding that lock, you should not have begun destroying that object in
>>> the first place. This could be solved by reference counting the handler
>>> which I don't think is needed.
>>
>> Right now the way controls are set up is very static, but in the future I
>> expect to see more dynamical behavior (I'm thinking of FPGAs supporting
>> partial reconfiguration). In cases like that it you do want to take the
>> lock preventing others from making modifications while the handler is
>> freed. I am well aware that much more work will have to be done if we want
>> to support such scenarios, but it is one reason why I would like to keep
>> the lock there.
>
> I'm ok with that.
>
> How about adding a note to the comment above devm_v4l2_ctrl_handler_init()
> that the function cannot be used with drivers that wish to use their own
> lock?
But wouldn't it be a false statement ? The driver can still control the
cleanup sequence by properly ordering the initialization sequence. So as
long as it is ensured the mutex is destroyed after the controls handler
(IOW, the mutex is created before the controls handler using the devm_*
API) everything should be fine, shouldn't it ?
Regards,
Sylwester
next prev parent reply other threads:[~2013-06-09 18:05 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-16 8:14 [PATCH RFC v3 0/3] added managed media/v4l2 initialization Andrzej Hajda
2013-05-16 8:14 ` [PATCH RFC v3 1/3] media: added managed media entity initialization Andrzej Hajda
2013-06-18 22:03 ` Laurent Pinchart
2013-06-19 10:33 ` Andrzej Hajda
2013-06-19 10:36 ` Laurent Pinchart
2013-06-20 6:11 ` Andrzej Hajda
2013-05-16 8:14 ` [PATCH RFC v3 2/3] media: added managed v4l2 control initialization Andrzej Hajda
2013-05-16 22:34 ` Sakari Ailus
2013-05-20 14:24 ` Andrzej Hajda
2013-05-31 1:10 ` Sakari Ailus
2013-05-23 10:39 ` Hans Verkuil
2013-05-31 1:08 ` Sakari Ailus
2013-05-31 7:59 ` Hans Verkuil
2013-06-06 21:41 ` Sakari Ailus
2013-06-09 18:05 ` Sylwester Nawrocki [this message]
2013-06-10 13:36 ` Hans Verkuil
2013-05-23 10:40 ` Hans Verkuil
2013-06-18 22:04 ` Laurent Pinchart
2013-05-16 8:14 ` [PATCH RFC v3 3/3] media: added managed v4l2/i2c subdevice initialization Andrzej Hajda
2013-05-23 10:40 ` Hans Verkuil
2013-06-18 22:00 ` Laurent Pinchart
2013-06-19 14:10 ` [PATCH RFC v4] " Andrzej Hajda
2013-08-22 11:10 ` Hans Verkuil
2013-08-22 11:20 ` Sylwester Nawrocki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51B4C3ED.40006@gmail.com \
--to=sylvester.nawrocki@gmail.com \
--cc=a.hajda@samsung.com \
--cc=hj210.choi@samsung.com \
--cc=hverkuil@xs4all.nl \
--cc=kyungmin.park@samsung.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=s.nawrocki@samsung.com \
--cc=sakari.ailus@iki.fi \
--cc=sw0312.kim@samsung.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox