diff mbox

[PATCHv8,22/26] media: vb2: fail if user ptr buffer is not correctly aligned

Message ID 1344958496-9373-23-git-send-email-t.stanislaws@samsung.com
State New
Headers show

Commit Message

Tomasz Stanislawski Aug. 14, 2012, 3:34 p.m. UTC
From: Marek Szyprowski <m.szyprowski@samsung.com>

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
---
 drivers/media/video/videobuf2-dma-contig.c |   10 ++++++++++
 1 file changed, 10 insertions(+)

Comments

Laurent Pinchart Aug. 15, 2012, 8:20 p.m. UTC | #1
Hi Tomasz,

Thanks for the patch.

On Tuesday 14 August 2012 17:34:52 Tomasz Stanislawski wrote:
> From: Marek Szyprowski <m.szyprowski@samsung.com>
> 
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
>  drivers/media/video/videobuf2-dma-contig.c |   10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/drivers/media/video/videobuf2-dma-contig.c
> b/drivers/media/video/videobuf2-dma-contig.c index d44766e..11f4a46 100644
> --- a/drivers/media/video/videobuf2-dma-contig.c
> +++ b/drivers/media/video/videobuf2-dma-contig.c
> @@ -498,6 +498,16 @@ static void *vb2_dc_get_userptr(void *alloc_ctx,
> unsigned long vaddr, struct vm_area_struct *vma;
>  	struct sg_table *sgt;
>  	unsigned long contig_size;
> +	unsigned long dma_align = dma_get_cache_alignment();
> +
> +	/*
> +	 * DMA transfers are not reliable to buffers which
> +	 * are not cache line aligned!
> +	 */

Are you scared of going near the 80 columns limit ? :-)

> +	if (vaddr & (dma_align - 1)) {

You could use the IS_ALIGNED macro here, but that might just be nitpicking.

> +		pr_err("userptr must be aligned to %lu bytes\n", dma_align);
> +		return ERR_PTR(-EINVAL);
> +	}

Shouldn't you also check that the size is a multiple of dma_align ?

>  	buf = kzalloc(sizeof *buf, GFP_KERNEL);
>  	if (!buf)
diff mbox

Patch

diff --git a/drivers/media/video/videobuf2-dma-contig.c b/drivers/media/video/videobuf2-dma-contig.c
index d44766e..11f4a46 100644
--- a/drivers/media/video/videobuf2-dma-contig.c
+++ b/drivers/media/video/videobuf2-dma-contig.c
@@ -498,6 +498,16 @@  static void *vb2_dc_get_userptr(void *alloc_ctx, unsigned long vaddr,
 	struct vm_area_struct *vma;
 	struct sg_table *sgt;
 	unsigned long contig_size;
+	unsigned long dma_align = dma_get_cache_alignment();
+
+	/*
+	 * DMA transfers are not reliable to buffers which
+	 * are not cache line aligned!
+	 */
+	if (vaddr & (dma_align - 1)) {
+		pr_err("userptr must be aligned to %lu bytes\n", dma_align);
+		return ERR_PTR(-EINVAL);
+	}
 
 	buf = kzalloc(sizeof *buf, GFP_KERNEL);
 	if (!buf)