Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

V4L/DVB: videobuf: add ext_lock argument to the queue init functions

Add an ext_lock argument to the videobuf init functions. This allows
drivers to pass the vdev->lock pointer (or any other externally held lock)
to videobuf. For now all drivers just pass NULL.

Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

authored by

Hans Verkuil and committed by
Mauro Carvalho Chehab
08bff03e 97397687

+48 -37
+1 -1
drivers/media/common/saa7146_vbi.c
··· 412 412 V4L2_BUF_TYPE_VBI_CAPTURE, 413 413 V4L2_FIELD_SEQ_TB, // FIXME: does this really work? 414 414 sizeof(struct saa7146_buf), 415 - file); 415 + file, NULL); 416 416 417 417 init_timer(&fh->vbi_read_timeout); 418 418 fh->vbi_read_timeout.function = vbi_read_timeout;
+1 -1
drivers/media/common/saa7146_video.c
··· 1386 1386 V4L2_BUF_TYPE_VIDEO_CAPTURE, 1387 1387 V4L2_FIELD_INTERLACED, 1388 1388 sizeof(struct saa7146_buf), 1389 - file); 1389 + file, NULL); 1390 1390 1391 1391 return 0; 1392 1392 }
+2 -2
drivers/media/video/au0828/au0828-video.c
··· 965 965 NULL, &dev->slock, 966 966 V4L2_BUF_TYPE_VIDEO_CAPTURE, 967 967 V4L2_FIELD_INTERLACED, 968 - sizeof(struct au0828_buffer), fh); 968 + sizeof(struct au0828_buffer), fh, NULL); 969 969 970 970 /* VBI Setup */ 971 971 dev->vbi_width = 720; ··· 974 974 NULL, &dev->slock, 975 975 V4L2_BUF_TYPE_VBI_CAPTURE, 976 976 V4L2_FIELD_SEQ_TB, 977 - sizeof(struct au0828_buffer), fh); 977 + sizeof(struct au0828_buffer), fh, NULL); 978 978 979 979 980 980 return ret;
+2 -2
drivers/media/video/bt8xx/bttv-driver.c
··· 3318 3318 V4L2_BUF_TYPE_VIDEO_CAPTURE, 3319 3319 V4L2_FIELD_INTERLACED, 3320 3320 sizeof(struct bttv_buffer), 3321 - fh); 3321 + fh, NULL); 3322 3322 videobuf_queue_sg_init(&fh->vbi, &bttv_vbi_qops, 3323 3323 &btv->c.pci->dev, &btv->s_lock, 3324 3324 V4L2_BUF_TYPE_VBI_CAPTURE, 3325 3325 V4L2_FIELD_SEQ_TB, 3326 3326 sizeof(struct bttv_buffer), 3327 - fh); 3327 + fh, NULL); 3328 3328 set_tvnorm(btv,btv->tvnorm); 3329 3329 set_input(btv, btv->input, btv->tvnorm); 3330 3330
+4 -2
drivers/media/video/cx231xx/cx231xx-video.c
··· 2008 2008 videobuf_queue_vmalloc_init(&fh->vb_vidq, &cx231xx_video_qops, 2009 2009 NULL, &dev->video_mode.slock, 2010 2010 fh->type, V4L2_FIELD_INTERLACED, 2011 - sizeof(struct cx231xx_buffer), fh); 2011 + sizeof(struct cx231xx_buffer), 2012 + fh, NULL); 2012 2013 if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE) { 2013 2014 /* Set the required alternate setting VBI interface works in 2014 2015 Bulk mode only */ ··· 2018 2017 videobuf_queue_vmalloc_init(&fh->vb_vidq, &cx231xx_vbi_qops, 2019 2018 NULL, &dev->vbi_mode.slock, 2020 2019 fh->type, V4L2_FIELD_SEQ_TB, 2021 - sizeof(struct cx231xx_buffer), fh); 2020 + sizeof(struct cx231xx_buffer), 2021 + fh, NULL); 2022 2022 } 2023 2023 2024 2024 mutex_unlock(&dev->lock);
+1 -1
drivers/media/video/cx23885/cx23885-417.c
··· 1591 1591 V4L2_BUF_TYPE_VIDEO_CAPTURE, 1592 1592 V4L2_FIELD_INTERLACED, 1593 1593 sizeof(struct cx23885_buffer), 1594 - fh); 1594 + fh, NULL); 1595 1595 unlock_kernel(); 1596 1596 1597 1597 return 0;
+1 -1
drivers/media/video/cx23885/cx23885-dvb.c
··· 1071 1071 videobuf_queue_sg_init(&fe0->dvb.dvbq, &dvb_qops, 1072 1072 &dev->pci->dev, &port->slock, 1073 1073 V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_FIELD_TOP, 1074 - sizeof(struct cx23885_buffer), port); 1074 + sizeof(struct cx23885_buffer), port, NULL); 1075 1075 } 1076 1076 err = dvb_register(port); 1077 1077 if (err != 0)
+1 -1
drivers/media/video/cx23885/cx23885-video.c
··· 758 758 V4L2_BUF_TYPE_VIDEO_CAPTURE, 759 759 V4L2_FIELD_INTERLACED, 760 760 sizeof(struct cx23885_buffer), 761 - fh); 761 + fh, NULL); 762 762 763 763 dprintk(1, "post videobuf_queue_init()\n"); 764 764
+1 -1
drivers/media/video/cx88/cx88-blackbird.c
··· 1094 1094 V4L2_BUF_TYPE_VIDEO_CAPTURE, 1095 1095 V4L2_FIELD_INTERLACED, 1096 1096 sizeof(struct cx88_buffer), 1097 - fh); 1097 + fh, NULL); 1098 1098 1099 1099 /* FIXME: locking against other video device */ 1100 1100 cx88_set_scale(dev->core, dev->width, dev->height,
+1 -1
drivers/media/video/cx88/cx88-dvb.c
··· 1576 1576 V4L2_BUF_TYPE_VIDEO_CAPTURE, 1577 1577 V4L2_FIELD_TOP, 1578 1578 sizeof(struct cx88_buffer), 1579 - dev); 1579 + dev, NULL); 1580 1580 /* init struct videobuf_dvb */ 1581 1581 fe->dvb.name = dev->core->name; 1582 1582 }
+2 -2
drivers/media/video/cx88/cx88-video.c
··· 793 793 V4L2_BUF_TYPE_VIDEO_CAPTURE, 794 794 V4L2_FIELD_INTERLACED, 795 795 sizeof(struct cx88_buffer), 796 - fh); 796 + fh, NULL); 797 797 videobuf_queue_sg_init(&fh->vbiq, &cx8800_vbi_qops, 798 798 &dev->pci->dev, &dev->slock, 799 799 V4L2_BUF_TYPE_VBI_CAPTURE, 800 800 V4L2_FIELD_SEQ_TB, 801 801 sizeof(struct cx88_buffer), 802 - fh); 802 + fh, NULL); 803 803 804 804 if (fh->radio) { 805 805 dprintk(1,"video_open: setting radio device\n");
+2 -2
drivers/media/video/em28xx/em28xx-video.c
··· 2182 2182 videobuf_queue_vmalloc_init(&fh->vb_vidq, &em28xx_video_qops, 2183 2183 NULL, &dev->slock, 2184 2184 V4L2_BUF_TYPE_VIDEO_CAPTURE, field, 2185 - sizeof(struct em28xx_buffer), fh); 2185 + sizeof(struct em28xx_buffer), fh, NULL); 2186 2186 2187 2187 videobuf_queue_vmalloc_init(&fh->vb_vbiq, &em28xx_vbi_qops, 2188 2188 NULL, &dev->slock, 2189 2189 V4L2_BUF_TYPE_VBI_CAPTURE, 2190 2190 V4L2_FIELD_SEQ_TB, 2191 - sizeof(struct em28xx_buffer), fh); 2191 + sizeof(struct em28xx_buffer), fh, NULL); 2192 2192 2193 2193 mutex_unlock(&dev->lock); 2194 2194
+1 -1
drivers/media/video/s2255drv.c
··· 1817 1817 NULL, &dev->slock, 1818 1818 fh->type, 1819 1819 V4L2_FIELD_INTERLACED, 1820 - sizeof(struct s2255_buffer), fh); 1820 + sizeof(struct s2255_buffer), fh, NULL); 1821 1821 return 0; 1822 1822 } 1823 1823
+1 -1
drivers/media/video/saa7134/saa7134-dvb.c
··· 1111 1111 V4L2_BUF_TYPE_VIDEO_CAPTURE, 1112 1112 V4L2_FIELD_ALTERNATE, 1113 1113 sizeof(struct saa7134_buf), 1114 - dev); 1114 + dev, NULL); 1115 1115 1116 1116 switch (dev->board) { 1117 1117 case SAA7134_BOARD_PINNACLE_300I_DVBT_PAL:
+1 -1
drivers/media/video/saa7134/saa7134-empress.c
··· 542 542 V4L2_BUF_TYPE_VIDEO_CAPTURE, 543 543 V4L2_FIELD_ALTERNATE, 544 544 sizeof(struct saa7134_buf), 545 - dev); 545 + dev, NULL); 546 546 547 547 empress_signal_update(&dev->empress_workqueue); 548 548 return 0;
+2 -2
drivers/media/video/saa7134/saa7134-video.c
··· 1366 1366 V4L2_BUF_TYPE_VIDEO_CAPTURE, 1367 1367 V4L2_FIELD_INTERLACED, 1368 1368 sizeof(struct saa7134_buf), 1369 - fh); 1369 + fh, NULL); 1370 1370 videobuf_queue_sg_init(&fh->vbi, &saa7134_vbi_qops, 1371 1371 &dev->pci->dev, &dev->slock, 1372 1372 V4L2_BUF_TYPE_VBI_CAPTURE, 1373 1373 V4L2_FIELD_SEQ_TB, 1374 1374 sizeof(struct saa7134_buf), 1375 - fh); 1375 + fh, NULL); 1376 1376 saa7134_pgtable_alloc(dev->pci,&fh->pt_cap); 1377 1377 saa7134_pgtable_alloc(dev->pci,&fh->pt_vbi); 1378 1378
+3 -1
drivers/media/video/videobuf-core.c
··· 125 125 enum v4l2_field field, 126 126 unsigned int msize, 127 127 void *priv, 128 - struct videobuf_qtype_ops *int_ops) 128 + struct videobuf_qtype_ops *int_ops, 129 + struct mutex *ext_lock) 129 130 { 130 131 BUG_ON(!q); 131 132 memset(q, 0, sizeof(*q)); 132 133 q->irqlock = irqlock; 134 + q->ext_lock = ext_lock; 133 135 q->dev = dev; 134 136 q->type = type; 135 137 q->field = field;
+3 -2
drivers/media/video/videobuf-dma-contig.c
··· 349 349 enum v4l2_buf_type type, 350 350 enum v4l2_field field, 351 351 unsigned int msize, 352 - void *priv) 352 + void *priv, 353 + struct mutex *ext_lock) 353 354 { 354 355 videobuf_queue_core_init(q, ops, dev, irqlock, type, field, msize, 355 - priv, &qops); 356 + priv, &qops, ext_lock); 356 357 } 357 358 EXPORT_SYMBOL_GPL(videobuf_queue_dma_contig_init); 358 359
+3 -2
drivers/media/video/videobuf-dma-sg.c
··· 654 654 enum v4l2_buf_type type, 655 655 enum v4l2_field field, 656 656 unsigned int msize, 657 - void *priv) 657 + void *priv, 658 + struct mutex *ext_lock) 658 659 { 659 660 videobuf_queue_core_init(q, ops, dev, irqlock, type, field, msize, 660 - priv, &sg_ops); 661 + priv, &sg_ops, ext_lock); 661 662 } 662 663 EXPORT_SYMBOL_GPL(videobuf_queue_sg_init); 663 664
+3 -2
drivers/media/video/videobuf-vmalloc.c
··· 304 304 enum v4l2_buf_type type, 305 305 enum v4l2_field field, 306 306 unsigned int msize, 307 - void *priv) 307 + void *priv, 308 + struct mutex *ext_lock) 308 309 { 309 310 videobuf_queue_core_init(q, ops, dev, irqlock, type, field, msize, 310 - priv, &qops); 311 + priv, &qops, ext_lock); 311 312 } 312 313 EXPORT_SYMBOL_GPL(videobuf_queue_vmalloc_init); 313 314
+1 -1
drivers/media/video/vivi.c
··· 1176 1176 videobuf_queue_vmalloc_init(&dev->vb_vidq, &vivi_video_qops, 1177 1177 NULL, &dev->slock, V4L2_BUF_TYPE_VIDEO_CAPTURE, 1178 1178 V4L2_FIELD_INTERLACED, 1179 - sizeof(struct vivi_buffer), dev); 1179 + sizeof(struct vivi_buffer), dev, NULL); 1180 1180 1181 1181 /* init video dma queues */ 1182 1182 INIT_LIST_HEAD(&dev->vidq.active);
+1 -1
drivers/media/video/zr364xx.c
··· 1304 1304 NULL, &cam->slock, 1305 1305 cam->type, 1306 1306 V4L2_FIELD_NONE, 1307 - sizeof(struct zr364xx_buffer), cam); 1307 + sizeof(struct zr364xx_buffer), cam, NULL); 1308 1308 1309 1309 /* Added some delay here, since opening/closing the camera quickly, 1310 1310 * like Ekiga does during its startup, can crash the webcam
+1 -1
drivers/staging/cx25821/cx25821-video.c
··· 856 856 &dev->pci->dev, &dev->slock, 857 857 V4L2_BUF_TYPE_VIDEO_CAPTURE, 858 858 V4L2_FIELD_INTERLACED, 859 - sizeof(struct cx25821_buffer), fh); 859 + sizeof(struct cx25821_buffer), fh, NULL); 860 860 861 861 dprintk(1, "post videobuf_queue_init()\n"); 862 862 unlock_kernel();
+1 -1
drivers/staging/tm6000/tm6000-video.c
··· 1300 1300 NULL, &dev->slock, 1301 1301 fh->type, 1302 1302 V4L2_FIELD_INTERLACED, 1303 - sizeof(struct tm6000_buffer),fh); 1303 + sizeof(struct tm6000_buffer), fh, NULL); 1304 1304 1305 1305 return 0; 1306 1306 }
+2 -1
include/media/videobuf-core.h
··· 198 198 enum v4l2_field field, 199 199 unsigned int msize, 200 200 void *priv, 201 - struct videobuf_qtype_ops *int_ops); 201 + struct videobuf_qtype_ops *int_ops, 202 + struct mutex *ext_lock); 202 203 int videobuf_queue_is_busy(struct videobuf_queue *q); 203 204 void videobuf_queue_cancel(struct videobuf_queue *q); 204 205
+2 -1
include/media/videobuf-dma-contig.h
··· 23 23 enum v4l2_buf_type type, 24 24 enum v4l2_field field, 25 25 unsigned int msize, 26 - void *priv); 26 + void *priv, 27 + struct mutex *ext_lock); 27 28 28 29 dma_addr_t videobuf_to_dma_contig(struct videobuf_buffer *buf); 29 30 void videobuf_dma_contig_free(struct videobuf_queue *q,
+2 -1
include/media/videobuf-dma-sg.h
··· 103 103 enum v4l2_buf_type type, 104 104 enum v4l2_field field, 105 105 unsigned int msize, 106 - void *priv); 106 + void *priv, 107 + struct mutex *ext_lock); 107 108 108 109 #endif /* _VIDEOBUF_DMA_SG_H */ 109 110
+2 -1
include/media/videobuf-vmalloc.h
··· 36 36 enum v4l2_buf_type type, 37 37 enum v4l2_field field, 38 38 unsigned int msize, 39 - void *priv); 39 + void *priv, 40 + struct mutex *ext_lock); 40 41 41 42 void *videobuf_to_vmalloc(struct videobuf_buffer *buf); 42 43