summaryrefslogtreecommitdiffstats
path: root/include/media/soc_camera.h
diff options
context:
space:
mode:
authorGuennadi Liakhovetski <g.liakhovetski@gmx.de>2012-12-20 13:02:51 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-01-05 01:35:35 -0200
commit7d051b35d5196ad6011a17e751dbd3d180abb046 (patch)
tree718bd75e1967da3d27861ee7a1fc15ca2f015492 /include/media/soc_camera.h
parentdaf16bab1eaf5a82217697bfb91eb7d9c9745d0d (diff)
downloadop-kernel-dev-7d051b35d5196ad6011a17e751dbd3d180abb046.zip
op-kernel-dev-7d051b35d5196ad6011a17e751dbd3d180abb046.tar.gz
[media] soc-camera: properly fix camera probing races
The recently introduced host_lock causes lockdep warnings, besides, list enumeration in scan_add_host() must be protected by holdint the list_lock. OTOH, holding .video_lock in soc_camera_open() isn't enough to protect the host during its building of the pipeline, because .video_lock is per soc-camera device. If, e.g. more than one sensor can be attached to a host and the user tries to open both device nodes simultaneously, host's .add() method can be called simultaneously for both sensors. Fix these problems by holding list_lock instead of .host_lock in scan_add_host() and taking it shortly at the beginning of soc_camera_open(), and using .host_lock to protect host's .add() and .remove() operations only. Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'include/media/soc_camera.h')
-rw-r--r--include/media/soc_camera.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h
index 6442edc..0370a95 100644
--- a/include/media/soc_camera.h
+++ b/include/media/soc_camera.h
@@ -62,7 +62,7 @@ struct soc_camera_device {
struct soc_camera_host {
struct v4l2_device v4l2_dev;
struct list_head list;
- struct mutex host_lock; /* Protect during probing */
+ struct mutex host_lock; /* Protect pipeline modifications */
unsigned char nr; /* Host number */
u32 capabilities;
void *priv;
OpenPOWER on IntegriCloud