Re: [RFCv5 PATCH 02/15] vb2-dma-sg: add allocation context to dma-sg
Hi Hans, Thank you for the patch! On Fri, Nov 7, 2014 at 5:50 PM, Hans Verkuil wrote: > From: Hans Verkuil > > Require that dma-sg also uses an allocation context. This is in preparation > for adding prepare/finish memops to sync the memory between DMA and CPU. This patch does a bit more, i.e. adds DMA direction. Perhaps it should be split into two? > > Signed-off-by: Hans Verkuil > --- > drivers/media/pci/cx23885/cx23885-417.c | 1 + > drivers/media/pci/cx23885/cx23885-core.c| 10 +- > drivers/media/pci/cx23885/cx23885-dvb.c | 1 + > drivers/media/pci/cx23885/cx23885-vbi.c | 1 + > drivers/media/pci/cx23885/cx23885-video.c | 1 + > drivers/media/pci/cx23885/cx23885.h | 1 + > drivers/media/pci/saa7134/saa7134-core.c| 18 +++--- > drivers/media/pci/saa7134/saa7134-ts.c | 1 + > drivers/media/pci/saa7134/saa7134-vbi.c | 1 + > drivers/media/pci/saa7134/saa7134-video.c | 1 + > drivers/media/pci/saa7134/saa7134.h | 1 + > drivers/media/pci/solo6x10/solo6x10-v4l2-enc.c | 10 ++ > drivers/media/pci/solo6x10/solo6x10.h | 1 + > drivers/media/pci/tw68/tw68-core.c | 15 +++-- > drivers/media/pci/tw68/tw68-video.c | 1 + > drivers/media/pci/tw68/tw68.h | 1 + > drivers/media/platform/marvell-ccic/mcam-core.c | 7 > drivers/media/platform/marvell-ccic/mcam-core.h | 1 + > drivers/media/v4l2-core/videobuf2-core.c| 3 +- > drivers/media/v4l2-core/videobuf2-dma-contig.c | 4 ++- > drivers/media/v4l2-core/videobuf2-dma-sg.c | 44 > +++-- > drivers/media/v4l2-core/videobuf2-vmalloc.c | 3 +- > include/media/videobuf2-core.h | 3 +- > include/media/videobuf2-dma-sg.h| 3 ++ > 24 files changed, 118 insertions(+), 15 deletions(-) > > diff --git a/drivers/media/pci/cx23885/cx23885-417.c > b/drivers/media/pci/cx23885/cx23885-417.c > index 3948db3..d72a3ec 100644 > --- a/drivers/media/pci/cx23885/cx23885-417.c > +++ b/drivers/media/pci/cx23885/cx23885-417.c > @@ -1148,6 +1148,7 @@ static int queue_setup(struct vb2_queue *q, const > struct v4l2_format *fmt, > dev->ts1.ts_packet_count = mpeglines; > *num_planes = 1; > sizes[0] = mpeglinesize * mpeglines; > + alloc_ctxs[0] = dev->alloc_ctx; > *num_buffers = mpegbufs; > return 0; > } > diff --git a/drivers/media/pci/cx23885/cx23885-core.c > b/drivers/media/pci/cx23885/cx23885-core.c > index 331edda..0451522 100644 > --- a/drivers/media/pci/cx23885/cx23885-core.c > +++ b/drivers/media/pci/cx23885/cx23885-core.c > @@ -1997,9 +1997,14 @@ static int cx23885_initdev(struct pci_dev *pci_dev, > if (!pci_dma_supported(pci_dev, 0x)) { > printk("%s/0: Oops: no 32bit PCI DMA ???\n", dev->name); > err = -EIO; > - goto fail_irq; > + goto fail_context; > } > > + dev->alloc_ctx = vb2_dma_sg_init_ctx(&pci_dev->dev); > + if (IS_ERR(dev->alloc_ctx)) { > + err = -ENOMEM; Perhaps: err = PTR_ERR(dev->alloc->ctx); Here and in other places. > + goto fail_context; > + } > err = request_irq(pci_dev->irq, cx23885_irq, > IRQF_SHARED, dev->name, dev); > if (err < 0) { > @@ -2028,6 +2033,8 @@ static int cx23885_initdev(struct pci_dev *pci_dev, > return 0; > > fail_irq: > + vb2_dma_sg_cleanup_ctx(dev->alloc_ctx); > +fail_context: > cx23885_dev_unregister(dev); > fail_ctrl: > v4l2_ctrl_handler_free(hdl); > @@ -2053,6 +2060,7 @@ static void cx23885_finidev(struct pci_dev *pci_dev) > free_irq(pci_dev->irq, dev); > > cx23885_dev_unregister(dev); > + vb2_dma_sg_cleanup_ctx(dev->alloc_ctx); > v4l2_ctrl_handler_free(&dev->ctrl_handler); > v4l2_device_unregister(v4l2_dev); > kfree(dev); > diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c > b/drivers/media/pci/cx23885/cx23885-dvb.c > index 9da5cf3..e63759e 100644 > --- a/drivers/media/pci/cx23885/cx23885-dvb.c > +++ b/drivers/media/pci/cx23885/cx23885-dvb.c > @@ -102,6 +102,7 @@ static int queue_setup(struct vb2_queue *q, const struct > v4l2_format *fmt, > port->ts_packet_count = 32; > *num_planes = 1; > sizes[0] = port->ts_packet_size * port->ts_packet_count; > + alloc_ctxs[0] = port->dev->alloc_ctx; > *num_buffers = 32; > return 0; > } > diff --git a/drivers/media/pci/cx23885/cx23885-vbi.c > b/drivers/media/pci/cx23885/cx23885-vbi.c > index a7c6ef8..1d339a6 100644 > --- a/drivers/media/pci/cx23885/cx23885-vbi.c > +++ b/drivers/media/pci/cx23885/cx23885-vbi.c > @@ -132,6 +132,7 @@ static int queue_setup(struct vb2_queue *q, const struct > v4l2_format *fmt, > lines = VBI_NTSC_LINE_COUNT; > *num_planes = 1; > sizes[0] = lines *
[RFCv5 PATCH 02/15] vb2-dma-sg: add allocation context to dma-sg
From: Hans Verkuil Require that dma-sg also uses an allocation context. This is in preparation for adding prepare/finish memops to sync the memory between DMA and CPU. Signed-off-by: Hans Verkuil --- drivers/media/pci/cx23885/cx23885-417.c | 1 + drivers/media/pci/cx23885/cx23885-core.c| 10 +- drivers/media/pci/cx23885/cx23885-dvb.c | 1 + drivers/media/pci/cx23885/cx23885-vbi.c | 1 + drivers/media/pci/cx23885/cx23885-video.c | 1 + drivers/media/pci/cx23885/cx23885.h | 1 + drivers/media/pci/saa7134/saa7134-core.c| 18 +++--- drivers/media/pci/saa7134/saa7134-ts.c | 1 + drivers/media/pci/saa7134/saa7134-vbi.c | 1 + drivers/media/pci/saa7134/saa7134-video.c | 1 + drivers/media/pci/saa7134/saa7134.h | 1 + drivers/media/pci/solo6x10/solo6x10-v4l2-enc.c | 10 ++ drivers/media/pci/solo6x10/solo6x10.h | 1 + drivers/media/pci/tw68/tw68-core.c | 15 +++-- drivers/media/pci/tw68/tw68-video.c | 1 + drivers/media/pci/tw68/tw68.h | 1 + drivers/media/platform/marvell-ccic/mcam-core.c | 7 drivers/media/platform/marvell-ccic/mcam-core.h | 1 + drivers/media/v4l2-core/videobuf2-core.c| 3 +- drivers/media/v4l2-core/videobuf2-dma-contig.c | 4 ++- drivers/media/v4l2-core/videobuf2-dma-sg.c | 44 +++-- drivers/media/v4l2-core/videobuf2-vmalloc.c | 3 +- include/media/videobuf2-core.h | 3 +- include/media/videobuf2-dma-sg.h| 3 ++ 24 files changed, 118 insertions(+), 15 deletions(-) diff --git a/drivers/media/pci/cx23885/cx23885-417.c b/drivers/media/pci/cx23885/cx23885-417.c index 3948db3..d72a3ec 100644 --- a/drivers/media/pci/cx23885/cx23885-417.c +++ b/drivers/media/pci/cx23885/cx23885-417.c @@ -1148,6 +1148,7 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt, dev->ts1.ts_packet_count = mpeglines; *num_planes = 1; sizes[0] = mpeglinesize * mpeglines; + alloc_ctxs[0] = dev->alloc_ctx; *num_buffers = mpegbufs; return 0; } diff --git a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c index 331edda..0451522 100644 --- a/drivers/media/pci/cx23885/cx23885-core.c +++ b/drivers/media/pci/cx23885/cx23885-core.c @@ -1997,9 +1997,14 @@ static int cx23885_initdev(struct pci_dev *pci_dev, if (!pci_dma_supported(pci_dev, 0x)) { printk("%s/0: Oops: no 32bit PCI DMA ???\n", dev->name); err = -EIO; - goto fail_irq; + goto fail_context; } + dev->alloc_ctx = vb2_dma_sg_init_ctx(&pci_dev->dev); + if (IS_ERR(dev->alloc_ctx)) { + err = -ENOMEM; + goto fail_context; + } err = request_irq(pci_dev->irq, cx23885_irq, IRQF_SHARED, dev->name, dev); if (err < 0) { @@ -2028,6 +2033,8 @@ static int cx23885_initdev(struct pci_dev *pci_dev, return 0; fail_irq: + vb2_dma_sg_cleanup_ctx(dev->alloc_ctx); +fail_context: cx23885_dev_unregister(dev); fail_ctrl: v4l2_ctrl_handler_free(hdl); @@ -2053,6 +2060,7 @@ static void cx23885_finidev(struct pci_dev *pci_dev) free_irq(pci_dev->irq, dev); cx23885_dev_unregister(dev); + vb2_dma_sg_cleanup_ctx(dev->alloc_ctx); v4l2_ctrl_handler_free(&dev->ctrl_handler); v4l2_device_unregister(v4l2_dev); kfree(dev); diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c index 9da5cf3..e63759e 100644 --- a/drivers/media/pci/cx23885/cx23885-dvb.c +++ b/drivers/media/pci/cx23885/cx23885-dvb.c @@ -102,6 +102,7 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt, port->ts_packet_count = 32; *num_planes = 1; sizes[0] = port->ts_packet_size * port->ts_packet_count; + alloc_ctxs[0] = port->dev->alloc_ctx; *num_buffers = 32; return 0; } diff --git a/drivers/media/pci/cx23885/cx23885-vbi.c b/drivers/media/pci/cx23885/cx23885-vbi.c index a7c6ef8..1d339a6 100644 --- a/drivers/media/pci/cx23885/cx23885-vbi.c +++ b/drivers/media/pci/cx23885/cx23885-vbi.c @@ -132,6 +132,7 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt, lines = VBI_NTSC_LINE_COUNT; *num_planes = 1; sizes[0] = lines * VBI_LINE_LENGTH * 2; + alloc_ctxs[0] = dev->alloc_ctx; return 0; } diff --git a/drivers/media/pci/cx23885/cx23885-video.c b/drivers/media/pci/cx23885/cx23885-video.c index 682a4f9..1b04ab3 100644 --- a/drivers/media/pci/cx23885/cx23885-video.c +++ b/drivers/media/pci/cx23885/cx23885-video.c @@ -323,6 +323,7 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt, *num_planes = 1; sizes[0] = (dev->fm