diff options
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 | ||