aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/common/saa7146_fops.c4
-rw-r--r--drivers/media/radio/wl128x/fmdrv_v4l2.c4
-rw-r--r--drivers/media/video/blackfin/bfin_capture.c4
-rw-r--r--drivers/media/video/cpia2/cpia2_v4l.c4
-rw-r--r--drivers/media/video/cx231xx/cx231xx-video.c4
-rw-r--r--drivers/media/video/davinci/vpbe_display.c4
-rw-r--r--drivers/media/video/davinci/vpif_capture.c4
-rw-r--r--drivers/media/video/davinci/vpif_display.c4
-rw-r--r--drivers/media/video/em28xx/em28xx-video.c4
-rw-r--r--drivers/media/video/fsl-viu.c4
-rw-r--r--drivers/media/video/ivtv/ivtv-streams.c4
-rw-r--r--drivers/media/video/mem2mem_testdev.c4
-rw-r--r--drivers/media/video/mx2_emmaprp.c4
-rw-r--r--drivers/media/video/s2255drv.c4
-rw-r--r--drivers/media/video/s5p-fimc/fimc-capture.c4
-rw-r--r--drivers/media/video/s5p-fimc/fimc-core.c4
-rw-r--r--drivers/media/video/s5p-g2d/g2d.c4
-rw-r--r--drivers/media/video/s5p-jpeg/jpeg-core.c8
-rw-r--r--drivers/media/video/s5p-mfc/s5p_mfc.c6
-rw-r--r--drivers/media/video/s5p-tv/mixer_video.c4
-rw-r--r--drivers/media/video/sh_vou.c4
-rw-r--r--drivers/media/video/soc_camera.c4
-rw-r--r--drivers/media/video/tm6000/tm6000-video.c4
-rw-r--r--drivers/media/video/usbvision/usbvision-video.c4
-rw-r--r--drivers/media/video/v4l2-dev.c32
-rw-r--r--drivers/staging/media/dt3155v4l/dt3155v4l.c4
-rw-r--r--include/media/v4l2-dev.h3
27 files changed, 129 insertions, 12 deletions
diff --git a/drivers/media/common/saa7146_fops.c b/drivers/media/common/saa7146_fops.c
index 71f8e018e564..8d7df1a0bcd0 100644
--- a/drivers/media/common/saa7146_fops.c
+++ b/drivers/media/common/saa7146_fops.c
@@ -511,6 +511,10 @@ int saa7146_register_device(struct video_device **vid, struct saa7146_dev* dev,
511 vfd->fops = &video_fops; 511 vfd->fops = &video_fops;
512 vfd->ioctl_ops = &dev->ext_vv_data->ops; 512 vfd->ioctl_ops = &dev->ext_vv_data->ops;
513 vfd->release = video_device_release; 513 vfd->release = video_device_release;
514 /* Locking in file operations other than ioctl should be done by
515 the driver, not the V4L2 core.
516 This driver needs auditing so that this flag can be removed. */
517 set_bit(V4L2_FL_LOCK_ALL_FOPS, &vfd->flags);
514 vfd->lock = &dev->v4l2_lock; 518 vfd->lock = &dev->v4l2_lock;
515 vfd->tvnorms = 0; 519 vfd->tvnorms = 0;
516 for (i = 0; i < dev->ext_vv_data->num_stds; i++) 520 for (i = 0; i < dev->ext_vv_data->num_stds; i++)
diff --git a/drivers/media/radio/wl128x/fmdrv_v4l2.c b/drivers/media/radio/wl128x/fmdrv_v4l2.c
index 077d369a0173..080b96a61f1a 100644
--- a/drivers/media/radio/wl128x/fmdrv_v4l2.c
+++ b/drivers/media/radio/wl128x/fmdrv_v4l2.c
@@ -518,6 +518,10 @@ int fm_v4l2_init_video_device(struct fmdev *fmdev, int radio_nr)
518 video_set_drvdata(gradio_dev, fmdev); 518 video_set_drvdata(gradio_dev, fmdev);
519 519
520 gradio_dev->lock = &fmdev->mutex; 520 gradio_dev->lock = &fmdev->mutex;
521 /* Locking in file operations other than ioctl should be done
522 by the driver, not the V4L2 core.
523 This driver needs auditing so that this flag can be removed. */
524 set_bit(V4L2_FL_LOCK_ALL_FOPS, &gradio_dev->flags);
521 525
522 /* Register with V4L2 subsystem as RADIO device */ 526 /* Register with V4L2 subsystem as RADIO device */
523 if (video_register_device(gradio_dev, VFL_TYPE_RADIO, radio_nr)) { 527 if (video_register_device(gradio_dev, VFL_TYPE_RADIO, radio_nr)) {
diff --git a/drivers/media/video/blackfin/bfin_capture.c b/drivers/media/video/blackfin/bfin_capture.c
index 514fcf742f5a..0aba45e34f70 100644
--- a/drivers/media/video/blackfin/bfin_capture.c
+++ b/drivers/media/video/blackfin/bfin_capture.c
@@ -942,6 +942,10 @@ static int __devinit bcap_probe(struct platform_device *pdev)
942 INIT_LIST_HEAD(&bcap_dev->dma_queue); 942 INIT_LIST_HEAD(&bcap_dev->dma_queue);
943 943
944 vfd->lock = &bcap_dev->mutex; 944 vfd->lock = &bcap_dev->mutex;
945 /* Locking in file operations other than ioctl should be done
946 by the driver, not the V4L2 core.
947 This driver needs auditing so that this flag can be removed. */
948 set_bit(V4L2_FL_LOCK_ALL_FOPS, &vfd->flags);
945 949
946 /* register video device */ 950 /* register video device */
947 ret = video_register_device(bcap_dev->video_dev, VFL_TYPE_GRABBER, -1); 951 ret = video_register_device(bcap_dev->video_dev, VFL_TYPE_GRABBER, -1);
diff --git a/drivers/media/video/cpia2/cpia2_v4l.c b/drivers/media/video/cpia2/cpia2_v4l.c
index bb4f1d0de829..55e92902a76c 100644
--- a/drivers/media/video/cpia2/cpia2_v4l.c
+++ b/drivers/media/video/cpia2/cpia2_v4l.c
@@ -1147,6 +1147,10 @@ int cpia2_register_camera(struct camera_data *cam)
1147 cam->vdev.ctrl_handler = hdl; 1147 cam->vdev.ctrl_handler = hdl;
1148 cam->vdev.v4l2_dev = &cam->v4l2_dev; 1148 cam->vdev.v4l2_dev = &cam->v4l2_dev;
1149 set_bit(V4L2_FL_USE_FH_PRIO, &cam->vdev.flags); 1149 set_bit(V4L2_FL_USE_FH_PRIO, &cam->vdev.flags);
1150 /* Locking in file operations other than ioctl should be done
1151 by the driver, not the V4L2 core.
1152 This driver needs auditing so that this flag can be removed. */
1153 set_bit(V4L2_FL_LOCK_ALL_FOPS, &cam->vdev.flags);
1150 1154
1151 reset_camera_struct_v4l(cam); 1155 reset_camera_struct_v4l(cam);
1152 1156
diff --git a/drivers/media/video/cx231xx/cx231xx-video.c b/drivers/media/video/cx231xx/cx231xx-video.c
index 7f916f0685e9..2a04558699f8 100644
--- a/drivers/media/video/cx231xx/cx231xx-video.c
+++ b/drivers/media/video/cx231xx/cx231xx-video.c
@@ -2561,6 +2561,10 @@ static struct video_device *cx231xx_vdev_init(struct cx231xx *dev,
2561 vfd->release = video_device_release; 2561 vfd->release = video_device_release;
2562 vfd->debug = video_debug; 2562 vfd->debug = video_debug;
2563 vfd->lock = &dev->lock; 2563 vfd->lock = &dev->lock;
2564 /* Locking in file operations other than ioctl should be done
2565 by the driver, not the V4L2 core.
2566 This driver needs auditing so that this flag can be removed. */
2567 set_bit(V4L2_FL_LOCK_ALL_FOPS, &vfd->flags);
2564 2568
2565 snprintf(vfd->name, sizeof(vfd->name), "%s %s", dev->name, type_name); 2569 snprintf(vfd->name, sizeof(vfd->name), "%s %s", dev->name, type_name);
2566 2570
diff --git a/drivers/media/video/davinci/vpbe_display.c b/drivers/media/video/davinci/vpbe_display.c
index 1f3b1c729252..e106b72810a9 100644
--- a/drivers/media/video/davinci/vpbe_display.c
+++ b/drivers/media/video/davinci/vpbe_display.c
@@ -1618,6 +1618,10 @@ static __devinit int init_vpbe_layer(int i, struct vpbe_display *disp_dev,
1618 vbd->ioctl_ops = &vpbe_ioctl_ops; 1618 vbd->ioctl_ops = &vpbe_ioctl_ops;
1619 vbd->minor = -1; 1619 vbd->minor = -1;
1620 vbd->v4l2_dev = &disp_dev->vpbe_dev->v4l2_dev; 1620 vbd->v4l2_dev = &disp_dev->vpbe_dev->v4l2_dev;
1621 /* Locking in file operations other than ioctl should be done
1622 by the driver, not the V4L2 core.
1623 This driver needs auditing so that this flag can be removed. */
1624 set_bit(V4L2_FL_LOCK_ALL_FOPS, &vbd->flags);
1621 vbd->lock = &vpbe_display_layer->opslock; 1625 vbd->lock = &vpbe_display_layer->opslock;
1622 1626
1623 if (disp_dev->vpbe_dev->current_timings.timings_type & 1627 if (disp_dev->vpbe_dev->current_timings.timings_type &
diff --git a/drivers/media/video/davinci/vpif_capture.c b/drivers/media/video/davinci/vpif_capture.c
index 6504e40a31dd..96046957bf21 100644
--- a/drivers/media/video/davinci/vpif_capture.c
+++ b/drivers/media/video/davinci/vpif_capture.c
@@ -2228,6 +2228,10 @@ static __init int vpif_probe(struct platform_device *pdev)
2228 common = &(ch->common[VPIF_VIDEO_INDEX]); 2228 common = &(ch->common[VPIF_VIDEO_INDEX]);
2229 spin_lock_init(&common->irqlock); 2229 spin_lock_init(&common->irqlock);
2230 mutex_init(&common->lock); 2230 mutex_init(&common->lock);
2231 /* Locking in file operations other than ioctl should be done
2232 by the driver, not the V4L2 core.
2233 This driver needs auditing so that this flag can be removed. */
2234 set_bit(V4L2_FL_LOCK_ALL_FOPS, &ch->video_dev->flags);
2231 ch->video_dev->lock = &common->lock; 2235 ch->video_dev->lock = &common->lock;
2232 /* Initialize prio member of channel object */ 2236 /* Initialize prio member of channel object */
2233 v4l2_prio_init(&ch->prio); 2237 v4l2_prio_init(&ch->prio);
diff --git a/drivers/media/video/davinci/vpif_display.c b/drivers/media/video/davinci/vpif_display.c
index 7fa34b4fae26..e6488ee7db18 100644
--- a/drivers/media/video/davinci/vpif_display.c
+++ b/drivers/media/video/davinci/vpif_display.c
@@ -1778,6 +1778,10 @@ static __init int vpif_probe(struct platform_device *pdev)
1778 v4l2_prio_init(&ch->prio); 1778 v4l2_prio_init(&ch->prio);
1779 ch->common[VPIF_VIDEO_INDEX].fmt.type = 1779 ch->common[VPIF_VIDEO_INDEX].fmt.type =
1780 V4L2_BUF_TYPE_VIDEO_OUTPUT; 1780 V4L2_BUF_TYPE_VIDEO_OUTPUT;
1781 /* Locking in file operations other than ioctl should be done
1782 by the driver, not the V4L2 core.
1783 This driver needs auditing so that this flag can be removed. */
1784 set_bit(V4L2_FL_LOCK_ALL_FOPS, &ch->video_dev->flags);
1781 ch->video_dev->lock = &common->lock; 1785 ch->video_dev->lock = &common->lock;
1782 1786
1783 /* register video device */ 1787 /* register video device */
diff --git a/drivers/media/video/em28xx/em28xx-video.c b/drivers/media/video/em28xx/em28xx-video.c
index bcc41603c193..308a1dd08cfb 100644
--- a/drivers/media/video/em28xx/em28xx-video.c
+++ b/drivers/media/video/em28xx/em28xx-video.c
@@ -2495,6 +2495,10 @@ static struct video_device *em28xx_vdev_init(struct em28xx *dev,
2495 vfd->release = video_device_release; 2495 vfd->release = video_device_release;
2496 vfd->debug = video_debug; 2496 vfd->debug = video_debug;
2497 vfd->lock = &dev->lock; 2497 vfd->lock = &dev->lock;
2498 /* Locking in file operations other than ioctl should be done
2499 by the driver, not the V4L2 core.
2500 This driver needs auditing so that this flag can be removed. */
2501 set_bit(V4L2_FL_LOCK_ALL_FOPS, &vfd->flags);
2498 2502
2499 snprintf(vfd->name, sizeof(vfd->name), "%s %s", 2503 snprintf(vfd->name, sizeof(vfd->name), "%s %s",
2500 dev->name, type_name); 2504 dev->name, type_name);
diff --git a/drivers/media/video/fsl-viu.c b/drivers/media/video/fsl-viu.c
index 27e3e0c0b219..777486f7cadb 100644
--- a/drivers/media/video/fsl-viu.c
+++ b/drivers/media/video/fsl-viu.c
@@ -1544,6 +1544,10 @@ static int __devinit viu_of_probe(struct platform_device *op)
1544 1544
1545 /* initialize locks */ 1545 /* initialize locks */
1546 mutex_init(&viu_dev->lock); 1546 mutex_init(&viu_dev->lock);
1547 /* Locking in file operations other than ioctl should be done
1548 by the driver, not the V4L2 core.
1549 This driver needs auditing so that this flag can be removed. */
1550 set_bit(V4L2_FL_LOCK_ALL_FOPS, &viu_dev->vdev->flags);
1547 viu_dev->vdev->lock = &viu_dev->lock; 1551 viu_dev->vdev->lock = &viu_dev->lock;
1548 spin_lock_init(&viu_dev->slock); 1552 spin_lock_init(&viu_dev->slock);
1549 1553
diff --git a/drivers/media/video/ivtv/ivtv-streams.c b/drivers/media/video/ivtv/ivtv-streams.c
index 7ea5ca7f012b..6738592aa35d 100644
--- a/drivers/media/video/ivtv/ivtv-streams.c
+++ b/drivers/media/video/ivtv/ivtv-streams.c
@@ -228,6 +228,10 @@ static int ivtv_prep_dev(struct ivtv *itv, int type)
228 s->vdev->release = video_device_release; 228 s->vdev->release = video_device_release;
229 s->vdev->tvnorms = V4L2_STD_ALL; 229 s->vdev->tvnorms = V4L2_STD_ALL;
230 s->vdev->lock = &itv->serialize_lock; 230 s->vdev->lock = &itv->serialize_lock;
231 /* Locking in file operations other than ioctl should be done
232 by the driver, not the V4L2 core.
233 This driver needs auditing so that this flag can be removed. */
234 set_bit(V4L2_FL_LOCK_ALL_FOPS, &s->vdev->flags);
231 set_bit(V4L2_FL_USE_FH_PRIO, &s->vdev->flags); 235 set_bit(V4L2_FL_USE_FH_PRIO, &s->vdev->flags);
232 ivtv_set_funcs(s->vdev); 236 ivtv_set_funcs(s->vdev);
233 return 0; 237 return 0;
diff --git a/drivers/media/video/mem2mem_testdev.c b/drivers/media/video/mem2mem_testdev.c
index 12897e8a3314..ee3efbd83bdb 100644
--- a/drivers/media/video/mem2mem_testdev.c
+++ b/drivers/media/video/mem2mem_testdev.c
@@ -958,6 +958,10 @@ static int m2mtest_probe(struct platform_device *pdev)
958 } 958 }
959 959
960 *vfd = m2mtest_videodev; 960 *vfd = m2mtest_videodev;
961 /* Locking in file operations other than ioctl should be done
962 by the driver, not the V4L2 core.
963 This driver needs auditing so that this flag can be removed. */
964 set_bit(V4L2_FL_LOCK_ALL_FOPS, &vfd->flags);
961 vfd->lock = &dev->dev_mutex; 965 vfd->lock = &dev->dev_mutex;
962 966
963 ret = video_register_device(vfd, VFL_TYPE_GRABBER, 0); 967 ret = video_register_device(vfd, VFL_TYPE_GRABBER, 0);
diff --git a/drivers/media/video/mx2_emmaprp.c b/drivers/media/video/mx2_emmaprp.c
index 55ac1735e85b..0bd5815de369 100644
--- a/drivers/media/video/mx2_emmaprp.c
+++ b/drivers/media/video/mx2_emmaprp.c
@@ -904,6 +904,10 @@ static int emmaprp_probe(struct platform_device *pdev)
904 } 904 }
905 905
906 *vfd = emmaprp_videodev; 906 *vfd = emmaprp_videodev;
907 /* Locking in file operations other than ioctl should be done
908 by the driver, not the V4L2 core.
909 This driver needs auditing so that this flag can be removed. */
910 set_bit(V4L2_FL_LOCK_ALL_FOPS, &vfd->flags);
907 vfd->lock = &pcdev->dev_mutex; 911 vfd->lock = &pcdev->dev_mutex;
908 912
909 video_set_drvdata(vfd, pcdev); 913 video_set_drvdata(vfd, pcdev);
diff --git a/drivers/media/video/s2255drv.c b/drivers/media/video/s2255drv.c
index 37845def41c5..ea974fadb5e2 100644
--- a/drivers/media/video/s2255drv.c
+++ b/drivers/media/video/s2255drv.c
@@ -1948,6 +1948,10 @@ static int s2255_probe_v4l(struct s2255_dev *dev)
1948 /* register 4 video devices */ 1948 /* register 4 video devices */
1949 channel->vdev = template; 1949 channel->vdev = template;
1950 channel->vdev.lock = &dev->lock; 1950 channel->vdev.lock = &dev->lock;
1951 /* Locking in file operations other than ioctl should be done
1952 by the driver, not the V4L2 core.
1953 This driver needs auditing so that this flag can be removed. */
1954 set_bit(V4L2_FL_LOCK_ALL_FOPS, &channel->vdev.flags);
1951 channel->vdev.v4l2_dev = &dev->v4l2_dev; 1955 channel->vdev.v4l2_dev = &dev->v4l2_dev;
1952 video_set_drvdata(&channel->vdev, channel); 1956 video_set_drvdata(&channel->vdev, channel);
1953 if (video_nr == -1) 1957 if (video_nr == -1)
diff --git a/drivers/media/video/s5p-fimc/fimc-capture.c b/drivers/media/video/s5p-fimc/fimc-capture.c
index dc18ba510986..72d51504ed21 100644
--- a/drivers/media/video/s5p-fimc/fimc-capture.c
+++ b/drivers/media/video/s5p-fimc/fimc-capture.c
@@ -1516,6 +1516,10 @@ int fimc_register_capture_device(struct fimc_dev *fimc,
1516 vfd->minor = -1; 1516 vfd->minor = -1;
1517 vfd->release = video_device_release; 1517 vfd->release = video_device_release;
1518 vfd->lock = &fimc->lock; 1518 vfd->lock = &fimc->lock;
1519 /* Locking in file operations other than ioctl should be done
1520 by the driver, not the V4L2 core.
1521 This driver needs auditing so that this flag can be removed. */
1522 set_bit(V4L2_FL_LOCK_ALL_FOPS, &vfd->flags);
1519 video_set_drvdata(vfd, fimc); 1523 video_set_drvdata(vfd, fimc);
1520 1524
1521 vid_cap = &fimc->vid_cap; 1525 vid_cap = &fimc->vid_cap;
diff --git a/drivers/media/video/s5p-fimc/fimc-core.c b/drivers/media/video/s5p-fimc/fimc-core.c
index 7b90a897beeb..c58dd9f8ce67 100644
--- a/drivers/media/video/s5p-fimc/fimc-core.c
+++ b/drivers/media/video/s5p-fimc/fimc-core.c
@@ -1520,6 +1520,10 @@ int fimc_register_m2m_device(struct fimc_dev *fimc,
1520 vfd->minor = -1; 1520 vfd->minor = -1;
1521 vfd->release = video_device_release; 1521 vfd->release = video_device_release;
1522 vfd->lock = &fimc->lock; 1522 vfd->lock = &fimc->lock;
1523 /* Locking in file operations other than ioctl should be done
1524 by the driver, not the V4L2 core.
1525 This driver needs auditing so that this flag can be removed. */
1526 set_bit(V4L2_FL_LOCK_ALL_FOPS, &vfd->flags);
1523 1527
1524 snprintf(vfd->name, sizeof(vfd->name), "%s.m2m", dev_name(&pdev->dev)); 1528 snprintf(vfd->name, sizeof(vfd->name), "%s.m2m", dev_name(&pdev->dev));
1525 video_set_drvdata(vfd, fimc); 1529 video_set_drvdata(vfd, fimc);
diff --git a/drivers/media/video/s5p-g2d/g2d.c b/drivers/media/video/s5p-g2d/g2d.c
index 789de74014e5..02605cecfd65 100644
--- a/drivers/media/video/s5p-g2d/g2d.c
+++ b/drivers/media/video/s5p-g2d/g2d.c
@@ -762,6 +762,10 @@ static int g2d_probe(struct platform_device *pdev)
762 goto unreg_v4l2_dev; 762 goto unreg_v4l2_dev;
763 } 763 }
764 *vfd = g2d_videodev; 764 *vfd = g2d_videodev;
765 /* Locking in file operations other than ioctl should be done
766 by the driver, not the V4L2 core.
767 This driver needs auditing so that this flag can be removed. */
768 set_bit(V4L2_FL_LOCK_ALL_FOPS, &vfd->flags);
765 vfd->lock = &dev->mutex; 769 vfd->lock = &dev->mutex;
766 ret = video_register_device(vfd, VFL_TYPE_GRABBER, 0); 770 ret = video_register_device(vfd, VFL_TYPE_GRABBER, 0);
767 if (ret) { 771 if (ret) {
diff --git a/drivers/media/video/s5p-jpeg/jpeg-core.c b/drivers/media/video/s5p-jpeg/jpeg-core.c
index 5a49c307f9c1..ecf7b0b04c78 100644
--- a/drivers/media/video/s5p-jpeg/jpeg-core.c
+++ b/drivers/media/video/s5p-jpeg/jpeg-core.c
@@ -1386,6 +1386,10 @@ static int s5p_jpeg_probe(struct platform_device *pdev)
1386 jpeg->vfd_encoder->release = video_device_release; 1386 jpeg->vfd_encoder->release = video_device_release;
1387 jpeg->vfd_encoder->lock = &jpeg->lock; 1387 jpeg->vfd_encoder->lock = &jpeg->lock;
1388 jpeg->vfd_encoder->v4l2_dev = &jpeg->v4l2_dev; 1388 jpeg->vfd_encoder->v4l2_dev = &jpeg->v4l2_dev;
1389 /* Locking in file operations other than ioctl should be done
1390 by the driver, not the V4L2 core.
1391 This driver needs auditing so that this flag can be removed. */
1392 set_bit(V4L2_FL_LOCK_ALL_FOPS, &jpeg->vfd_encoder->flags);
1389 1393
1390 ret = video_register_device(jpeg->vfd_encoder, VFL_TYPE_GRABBER, -1); 1394 ret = video_register_device(jpeg->vfd_encoder, VFL_TYPE_GRABBER, -1);
1391 if (ret) { 1395 if (ret) {
@@ -1413,6 +1417,10 @@ static int s5p_jpeg_probe(struct platform_device *pdev)
1413 jpeg->vfd_decoder->release = video_device_release; 1417 jpeg->vfd_decoder->release = video_device_release;
1414 jpeg->vfd_decoder->lock = &jpeg->lock; 1418 jpeg->vfd_decoder->lock = &jpeg->lock;
1415 jpeg->vfd_decoder->v4l2_dev = &jpeg->v4l2_dev; 1419 jpeg->vfd_decoder->v4l2_dev = &jpeg->v4l2_dev;
1420 /* Locking in file operations other than ioctl should be done by the driver,
1421 not the V4L2 core.
1422 This driver needs auditing so that this flag can be removed. */
1423 set_bit(V4L2_FL_LOCK_ALL_FOPS, &jpeg->vfd_decoder->flags);
1416 1424
1417 ret = video_register_device(jpeg->vfd_decoder, VFL_TYPE_GRABBER, -1); 1425 ret = video_register_device(jpeg->vfd_decoder, VFL_TYPE_GRABBER, -1);
1418 if (ret) { 1426 if (ret) {
diff --git a/drivers/media/video/s5p-mfc/s5p_mfc.c b/drivers/media/video/s5p-mfc/s5p_mfc.c
index 83fe461af263..76008549b3f1 100644
--- a/drivers/media/video/s5p-mfc/s5p_mfc.c
+++ b/drivers/media/video/s5p-mfc/s5p_mfc.c
@@ -1048,6 +1048,10 @@ static int s5p_mfc_probe(struct platform_device *pdev)
1048 vfd->ioctl_ops = get_dec_v4l2_ioctl_ops(); 1048 vfd->ioctl_ops = get_dec_v4l2_ioctl_ops();
1049 vfd->release = video_device_release, 1049 vfd->release = video_device_release,
1050 vfd->lock = &dev->mfc_mutex; 1050 vfd->lock = &dev->mfc_mutex;
1051 /* Locking in file operations other than ioctl should be done
1052 by the driver, not the V4L2 core.
1053 This driver needs auditing so that this flag can be removed. */
1054 set_bit(V4L2_FL_LOCK_ALL_FOPS, &vfd->flags);
1051 vfd->v4l2_dev = &dev->v4l2_dev; 1055 vfd->v4l2_dev = &dev->v4l2_dev;
1052 snprintf(vfd->name, sizeof(vfd->name), "%s", S5P_MFC_DEC_NAME); 1056 snprintf(vfd->name, sizeof(vfd->name), "%s", S5P_MFC_DEC_NAME);
1053 dev->vfd_dec = vfd; 1057 dev->vfd_dec = vfd;
@@ -1072,6 +1076,8 @@ static int s5p_mfc_probe(struct platform_device *pdev)
1072 vfd->ioctl_ops = get_enc_v4l2_ioctl_ops(); 1076 vfd->ioctl_ops = get_enc_v4l2_ioctl_ops();
1073 vfd->release = video_device_release, 1077 vfd->release = video_device_release,
1074 vfd->lock = &dev->mfc_mutex; 1078 vfd->lock = &dev->mfc_mutex;
1079 /* This should not be necessary */
1080 set_bit(V4L2_FL_LOCK_ALL_FOPS, &vfd->flags);
1075 vfd->v4l2_dev = &dev->v4l2_dev; 1081 vfd->v4l2_dev = &dev->v4l2_dev;
1076 snprintf(vfd->name, sizeof(vfd->name), "%s", S5P_MFC_ENC_NAME); 1082 snprintf(vfd->name, sizeof(vfd->name), "%s", S5P_MFC_ENC_NAME);
1077 dev->vfd_enc = vfd; 1083 dev->vfd_enc = vfd;
diff --git a/drivers/media/video/s5p-tv/mixer_video.c b/drivers/media/video/s5p-tv/mixer_video.c
index f7ca5cc143c6..c0eadd75c9ac 100644
--- a/drivers/media/video/s5p-tv/mixer_video.c
+++ b/drivers/media/video/s5p-tv/mixer_video.c
@@ -1069,6 +1069,10 @@ struct mxr_layer *mxr_base_layer_create(struct mxr_device *mdev,
1069 set_bit(V4L2_FL_USE_FH_PRIO, &layer->vfd.flags); 1069 set_bit(V4L2_FL_USE_FH_PRIO, &layer->vfd.flags);
1070 1070
1071 video_set_drvdata(&layer->vfd, layer); 1071 video_set_drvdata(&layer->vfd, layer);
1072 /* Locking in file operations other than ioctl should be done
1073 by the driver, not the V4L2 core.
1074 This driver needs auditing so that this flag can be removed. */
1075 set_bit(V4L2_FL_LOCK_ALL_FOPS, &layer->vfd.flags);
1072 layer->vfd.lock = &layer->mutex; 1076 layer->vfd.lock = &layer->mutex;
1073 layer->vfd.v4l2_dev = &mdev->v4l2_dev; 1077 layer->vfd.v4l2_dev = &mdev->v4l2_dev;
1074 1078
diff --git a/drivers/media/video/sh_vou.c b/drivers/media/video/sh_vou.c
index 9644bd861abc..8fd1874382c6 100644
--- a/drivers/media/video/sh_vou.c
+++ b/drivers/media/video/sh_vou.c
@@ -1390,6 +1390,10 @@ static int __devinit sh_vou_probe(struct platform_device *pdev)
1390 vdev->v4l2_dev = &vou_dev->v4l2_dev; 1390 vdev->v4l2_dev = &vou_dev->v4l2_dev;
1391 vdev->release = video_device_release; 1391 vdev->release = video_device_release;
1392 vdev->lock = &vou_dev->fop_lock; 1392 vdev->lock = &vou_dev->fop_lock;
1393 /* Locking in file operations other than ioctl should be done
1394 by the driver, not the V4L2 core.
1395 This driver needs auditing so that this flag can be removed. */
1396 set_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags);
1393 1397
1394 vou_dev->vdev = vdev; 1398 vou_dev->vdev = vdev;
1395 video_set_drvdata(vdev, vou_dev); 1399 video_set_drvdata(vdev, vou_dev);
diff --git a/drivers/media/video/soc_camera.c b/drivers/media/video/soc_camera.c
index eb25756a07af..c27bb6d0a136 100644
--- a/drivers/media/video/soc_camera.c
+++ b/drivers/media/video/soc_camera.c
@@ -1425,6 +1425,10 @@ static int video_dev_create(struct soc_camera_device *icd)
1425 vdev->tvnorms = V4L2_STD_UNKNOWN; 1425 vdev->tvnorms = V4L2_STD_UNKNOWN;
1426 vdev->ctrl_handler = &icd->ctrl_handler; 1426 vdev->ctrl_handler = &icd->ctrl_handler;
1427 vdev->lock = &icd->video_lock; 1427 vdev->lock = &icd->video_lock;
1428 /* Locking in file operations other than ioctl should be done
1429 by the driver, not the V4L2 core.
1430 This driver needs auditing so that this flag can be removed. */
1431 set_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags);
1428 1432
1429 icd->vdev = vdev; 1433 icd->vdev = vdev;
1430 1434
diff --git a/drivers/media/video/tm6000/tm6000-video.c b/drivers/media/video/tm6000/tm6000-video.c
index 1ba26d5b2ba6..375f26abd916 100644
--- a/drivers/media/video/tm6000/tm6000-video.c
+++ b/drivers/media/video/tm6000/tm6000-video.c
@@ -1731,6 +1731,10 @@ static struct video_device *vdev_init(struct tm6000_core *dev,
1731 vfd->release = video_device_release; 1731 vfd->release = video_device_release;
1732 vfd->debug = tm6000_debug; 1732 vfd->debug = tm6000_debug;
1733 vfd->lock = &dev->lock; 1733 vfd->lock = &dev->lock;
1734 /* Locking in file operations other than ioctl should be done
1735 by the driver, not the V4L2 core.
1736 This driver needs auditing so that this flag can be removed. */
1737 set_bit(V4L2_FL_LOCK_ALL_FOPS, &vfd->flags);
1734 1738
1735 snprintf(vfd->name, sizeof(vfd->name), "%s %s", dev->name, type_name); 1739 snprintf(vfd->name, sizeof(vfd->name), "%s %s", dev->name, type_name);
1736 1740
diff --git a/drivers/media/video/usbvision/usbvision-video.c b/drivers/media/video/usbvision/usbvision-video.c
index 5a74f5e07d7d..9bd8f084f348 100644
--- a/drivers/media/video/usbvision/usbvision-video.c
+++ b/drivers/media/video/usbvision/usbvision-video.c
@@ -1296,6 +1296,10 @@ static struct video_device *usbvision_vdev_init(struct usb_usbvision *usbvision,
1296 if (NULL == vdev) 1296 if (NULL == vdev)
1297 return NULL; 1297 return NULL;
1298 *vdev = *vdev_template; 1298 *vdev = *vdev_template;
1299 /* Locking in file operations other than ioctl should be done
1300 by the driver, not the V4L2 core.
1301 This driver needs auditing so that this flag can be removed. */
1302 set_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags);
1299 vdev->lock = &usbvision->v4l2_lock; 1303 vdev->lock = &usbvision->v4l2_lock;
1300 vdev->v4l2_dev = &usbvision->v4l2_dev; 1304 vdev->v4l2_dev = &usbvision->v4l2_dev;
1301 snprintf(vdev->name, sizeof(vdev->name), "%s", name); 1305 snprintf(vdev->name, sizeof(vdev->name), "%s", name);
diff --git a/drivers/media/video/v4l2-dev.c b/drivers/media/video/v4l2-dev.c
index b1f0923212e6..2c4feffa4939 100644
--- a/drivers/media/video/v4l2-dev.c
+++ b/drivers/media/video/v4l2-dev.c
@@ -274,11 +274,12 @@ static ssize_t v4l2_read(struct file *filp, char __user *buf,
274 274
275 if (!vdev->fops->read) 275 if (!vdev->fops->read)
276 return -EINVAL; 276 return -EINVAL;
277 if (vdev->lock && mutex_lock_interruptible(vdev->lock)) 277 if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags) &&
278 mutex_lock_interruptible(vdev->lock))
278 return -ERESTARTSYS; 279 return -ERESTARTSYS;
279 if (video_is_registered(vdev)) 280 if (video_is_registered(vdev))
280 ret = vdev->fops->read(filp, buf, sz, off); 281 ret = vdev->fops->read(filp, buf, sz, off);
281 if (vdev->lock) 282 if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags))
282 mutex_unlock(vdev->lock); 283 mutex_unlock(vdev->lock);
283 return ret; 284 return ret;
284} 285}
@@ -291,11 +292,12 @@ static ssize_t v4l2_write(struct file *filp, const char __user *buf,
291 292
292 if (!vdev->fops->write) 293 if (!vdev->fops->write)
293 return -EINVAL; 294 return -EINVAL;
294 if (vdev->lock && mutex_lock_interruptible(vdev->lock)) 295 if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags) &&
296 mutex_lock_interruptible(vdev->lock))
295 return -ERESTARTSYS; 297 return -ERESTARTSYS;
296 if (video_is_registered(vdev)) 298 if (video_is_registered(vdev))
297 ret = vdev->fops->write(filp, buf, sz, off); 299 ret = vdev->fops->write(filp, buf, sz, off);
298 if (vdev->lock) 300 if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags))
299 mutex_unlock(vdev->lock); 301 mutex_unlock(vdev->lock);
300 return ret; 302 return ret;
301} 303}
@@ -307,11 +309,11 @@ static unsigned int v4l2_poll(struct file *filp, struct poll_table_struct *poll)
307 309
308 if (!vdev->fops->poll) 310 if (!vdev->fops->poll)
309 return DEFAULT_POLLMASK; 311 return DEFAULT_POLLMASK;
310 if (vdev->lock) 312 if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags))
311 mutex_lock(vdev->lock); 313 mutex_lock(vdev->lock);
312 if (video_is_registered(vdev)) 314 if (video_is_registered(vdev))
313 ret = vdev->fops->poll(filp, poll); 315 ret = vdev->fops->poll(filp, poll);
314 if (vdev->lock) 316 if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags))
315 mutex_unlock(vdev->lock); 317 mutex_unlock(vdev->lock);
316 return ret; 318 return ret;
317} 319}
@@ -399,11 +401,12 @@ static int v4l2_mmap(struct file *filp, struct vm_area_struct *vm)
399 401
400 if (!vdev->fops->mmap) 402 if (!vdev->fops->mmap)
401 return ret; 403 return ret;
402 if (vdev->lock && mutex_lock_interruptible(vdev->lock)) 404 if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags) &&
405 mutex_lock_interruptible(vdev->lock))
403 return -ERESTARTSYS; 406 return -ERESTARTSYS;
404 if (video_is_registered(vdev)) 407 if (video_is_registered(vdev))
405 ret = vdev->fops->mmap(filp, vm); 408 ret = vdev->fops->mmap(filp, vm);
406 if (vdev->lock) 409 if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags))
407 mutex_unlock(vdev->lock); 410 mutex_unlock(vdev->lock);
408 return ret; 411 return ret;
409} 412}
@@ -426,7 +429,8 @@ static int v4l2_open(struct inode *inode, struct file *filp)
426 video_get(vdev); 429 video_get(vdev);
427 mutex_unlock(&videodev_lock); 430 mutex_unlock(&videodev_lock);
428 if (vdev->fops->open) { 431 if (vdev->fops->open) {
429 if (vdev->lock && mutex_lock_interruptible(vdev->lock)) { 432 if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags) &&
433 mutex_lock_interruptible(vdev->lock)) {
430 ret = -ERESTARTSYS; 434 ret = -ERESTARTSYS;
431 goto err; 435 goto err;
432 } 436 }
@@ -434,7 +438,7 @@ static int v4l2_open(struct inode *inode, struct file *filp)
434 ret = vdev->fops->open(filp); 438 ret = vdev->fops->open(filp);
435 else 439 else
436 ret = -ENODEV; 440 ret = -ENODEV;
437 if (vdev->lock) 441 if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags))
438 mutex_unlock(vdev->lock); 442 mutex_unlock(vdev->lock);
439 } 443 }
440 444
@@ -452,10 +456,10 @@ static int v4l2_release(struct inode *inode, struct file *filp)
452 int ret = 0; 456 int ret = 0;
453 457
454 if (vdev->fops->release) { 458 if (vdev->fops->release) {
455 if (vdev->lock) 459 if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags))
456 mutex_lock(vdev->lock); 460 mutex_lock(vdev->lock);
457 vdev->fops->release(filp); 461 vdev->fops->release(filp);
458 if (vdev->lock) 462 if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags))
459 mutex_unlock(vdev->lock); 463 mutex_unlock(vdev->lock);
460 } 464 }
461 /* decrease the refcount unconditionally since the release() 465 /* decrease the refcount unconditionally since the release()
@@ -831,6 +835,10 @@ int __video_register_device(struct video_device *vdev, int type, int nr,
831 WARN_ON(video_device[vdev->minor] != NULL); 835 WARN_ON(video_device[vdev->minor] != NULL);
832 vdev->index = get_index(vdev); 836 vdev->index = get_index(vdev);
833 mutex_unlock(&videodev_lock); 837 mutex_unlock(&videodev_lock);
838 /* if no lock was passed, then make sure the LOCK_ALL_FOPS bit is
839 clear and warn if it wasn't. */
840 if (vdev->lock == NULL)
841 WARN_ON(test_and_clear_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags));
834 842
835 if (vdev->ioctl_ops) 843 if (vdev->ioctl_ops)
836 determine_valid_ioctls(vdev); 844 determine_valid_ioctls(vdev);
diff --git a/drivers/staging/media/dt3155v4l/dt3155v4l.c b/drivers/staging/media/dt3155v4l/dt3155v4l.c
index 280c84ec4cc2..c365cdf714ea 100644
--- a/drivers/staging/media/dt3155v4l/dt3155v4l.c
+++ b/drivers/staging/media/dt3155v4l/dt3155v4l.c
@@ -898,6 +898,10 @@ dt3155_probe(struct pci_dev *pdev, const struct pci_device_id *id)
898 INIT_LIST_HEAD(&pd->dmaq); 898 INIT_LIST_HEAD(&pd->dmaq);
899 mutex_init(&pd->mux); 899 mutex_init(&pd->mux);
900 pd->vdev->lock = &pd->mux; /* for locking v4l2_file_operations */ 900 pd->vdev->lock = &pd->mux; /* for locking v4l2_file_operations */
901 /* Locking in file operations other than ioctl should be done
902 by the driver, not the V4L2 core.
903 This driver needs auditing so that this flag can be removed. */
904 set_bit(V4L2_FL_LOCK_ALL_FOPS, &pd->vdev->flags);
901 spin_lock_init(&pd->lock); 905 spin_lock_init(&pd->lock);
902 pd->csr2 = csr2_init; 906 pd->csr2 = csr2_init;
903 pd->config = config_init; 907 pd->config = config_init;
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h
index a5ecec66d3c8..b604a7a50940 100644
--- a/include/media/v4l2-dev.h
+++ b/include/media/v4l2-dev.h
@@ -39,6 +39,9 @@ struct v4l2_ctrl_handler;
39#define V4L2_FL_USES_V4L2_FH (1) 39#define V4L2_FL_USES_V4L2_FH (1)
40/* Use the prio field of v4l2_fh for core priority checking */ 40/* Use the prio field of v4l2_fh for core priority checking */
41#define V4L2_FL_USE_FH_PRIO (2) 41#define V4L2_FL_USE_FH_PRIO (2)
42/* If ioctl core locking is in use, then apply that also to all
43 file operations. */
44#define V4L2_FL_LOCK_ALL_FOPS (3)
42 45
43/* Priority helper functions */ 46/* Priority helper functions */
44 47