mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
[media] v4l2 framework doc: clarify locking
high-latency devices. Thanks to Hans de Goede for our discussions on this topic. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Thanks-to: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
0fb6ec6b1c
commit
43599f31ab
1 changed files with 11 additions and 0 deletions
|
@ -612,6 +612,12 @@ You can set a pointer to a mutex_lock in struct video_device. Usually this
|
|||
will be either a top-level mutex or a mutex per device node. If you want
|
||||
finer-grained locking then you have to set it to NULL and do you own locking.
|
||||
|
||||
It is up to the driver developer to decide which method to use. However, if
|
||||
your driver has high-latency operations (for example, changing the exposure
|
||||
of a USB webcam might take a long time), then you might be better off with
|
||||
doing your own locking if you want to allow the user to do other things with
|
||||
the device while waiting for the high-latency command to finish.
|
||||
|
||||
If a lock is specified then all file operations will be serialized on that
|
||||
lock. If you use videobuf then you must pass the same lock to the videobuf
|
||||
queue initialize function: if videobuf has to wait for a frame to arrive, then
|
||||
|
@ -619,6 +625,11 @@ it will temporarily unlock the lock and relock it afterwards. If your driver
|
|||
also waits in the code, then you should do the same to allow other processes
|
||||
to access the device node while the first process is waiting for something.
|
||||
|
||||
In the case of videobuf2 you will need to implement the wait_prepare and
|
||||
wait_finish callbacks to unlock/lock if applicable. In particular, if you use
|
||||
the lock in struct video_device then you must unlock/lock this mutex in
|
||||
wait_prepare and wait_finish.
|
||||
|
||||
The implementation of a hotplug disconnect should also take the lock before
|
||||
calling v4l2_device_disconnect.
|
||||
|
||||
|
|
Loading…
Reference in a new issue