Re: [RFCv5 PATCH 02/15] vb2-dma-sg: add allocation context to dma-sg

2014-11-08 Thread Pawel Osciak
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

2014-11-07 Thread Hans Verkuil
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