diff options
Diffstat (limited to 'drivers/media/v4l2-core')
| -rw-r--r-- | drivers/media/v4l2-core/v4l2-dv-timings.c | 1 | ||||
| -rw-r--r-- | drivers/media/v4l2-core/videobuf-dma-contig.c | 12 | ||||
| -rw-r--r-- | drivers/media/v4l2-core/videobuf-dma-sg.c | 10 | ||||
| -rw-r--r-- | drivers/media/v4l2-core/videobuf-vmalloc.c | 10 | ||||
| -rw-r--r-- | drivers/media/v4l2-core/videobuf2-core.c | 5 | 
5 files changed, 19 insertions, 19 deletions
diff --git a/drivers/media/v4l2-core/v4l2-dv-timings.c b/drivers/media/v4l2-core/v4l2-dv-timings.c index ee52b9f4a944..f7902fe8a526 100644 --- a/drivers/media/v4l2-core/v4l2-dv-timings.c +++ b/drivers/media/v4l2-core/v4l2-dv-timings.c @@ -515,6 +515,7 @@ bool v4l2_detect_gtf(unsigned frame_height,  		aspect.denominator = 9;  	}  	image_width = ((image_height * aspect.numerator) / aspect.denominator); +	image_width = (image_width + GTF_CELL_GRAN/2) & ~(GTF_CELL_GRAN - 1);  	/* Horizontal */  	if (default_gtf) diff --git a/drivers/media/v4l2-core/videobuf-dma-contig.c b/drivers/media/v4l2-core/videobuf-dma-contig.c index 65411adcd0ea..7e6b209b7002 100644 --- a/drivers/media/v4l2-core/videobuf-dma-contig.c +++ b/drivers/media/v4l2-core/videobuf-dma-contig.c @@ -66,14 +66,11 @@ static void __videobuf_dc_free(struct device *dev,  static void videobuf_vm_open(struct vm_area_struct *vma)  {  	struct videobuf_mapping *map = vma->vm_private_data; -	struct videobuf_queue *q = map->q; -	dev_dbg(q->dev, "vm_open %p [count=%u,vma=%08lx-%08lx]\n", +	dev_dbg(map->q->dev, "vm_open %p [count=%u,vma=%08lx-%08lx]\n",  		map, map->count, vma->vm_start, vma->vm_end); -	videobuf_queue_lock(q);  	map->count++; -	videobuf_queue_unlock(q);  }  static void videobuf_vm_close(struct vm_area_struct *vma) @@ -85,11 +82,12 @@ static void videobuf_vm_close(struct vm_area_struct *vma)  	dev_dbg(q->dev, "vm_close %p [count=%u,vma=%08lx-%08lx]\n",  		map, map->count, vma->vm_start, vma->vm_end); -	videobuf_queue_lock(q); -	if (!--map->count) { +	map->count--; +	if (0 == map->count) {  		struct videobuf_dma_contig_memory *mem;  		dev_dbg(q->dev, "munmap %p q=%p\n", map, q); +		videobuf_queue_lock(q);  		/* We need first to cancel streams, before unmapping */  		if (q->streaming) @@ -128,8 +126,8 @@ static void videobuf_vm_close(struct vm_area_struct *vma)  		kfree(map); +		videobuf_queue_unlock(q);  	} -	videobuf_queue_unlock(q);  }  static const struct vm_operations_struct videobuf_vm_ops = { diff --git a/drivers/media/v4l2-core/videobuf-dma-sg.c b/drivers/media/v4l2-core/videobuf-dma-sg.c index 9db674ccdc68..828e7c10bd70 100644 --- a/drivers/media/v4l2-core/videobuf-dma-sg.c +++ b/drivers/media/v4l2-core/videobuf-dma-sg.c @@ -338,14 +338,11 @@ EXPORT_SYMBOL_GPL(videobuf_dma_free);  static void videobuf_vm_open(struct vm_area_struct *vma)  {  	struct videobuf_mapping *map = vma->vm_private_data; -	struct videobuf_queue *q = map->q;  	dprintk(2, "vm_open %p [count=%d,vma=%08lx-%08lx]\n", map,  		map->count, vma->vm_start, vma->vm_end); -	videobuf_queue_lock(q);  	map->count++; -	videobuf_queue_unlock(q);  }  static void videobuf_vm_close(struct vm_area_struct *vma) @@ -358,9 +355,10 @@ static void videobuf_vm_close(struct vm_area_struct *vma)  	dprintk(2, "vm_close %p [count=%d,vma=%08lx-%08lx]\n", map,  		map->count, vma->vm_start, vma->vm_end); -	videobuf_queue_lock(q); -	if (!--map->count) { +	map->count--; +	if (0 == map->count) {  		dprintk(1, "munmap %p q=%p\n", map, q); +		videobuf_queue_lock(q);  		for (i = 0; i < VIDEO_MAX_FRAME; i++) {  			if (NULL == q->bufs[i])  				continue; @@ -376,9 +374,9 @@ static void videobuf_vm_close(struct vm_area_struct *vma)  			q->bufs[i]->baddr = 0;  			q->ops->buf_release(q, q->bufs[i]);  		} +		videobuf_queue_unlock(q);  		kfree(map);  	} -	videobuf_queue_unlock(q);  	return;  } diff --git a/drivers/media/v4l2-core/videobuf-vmalloc.c b/drivers/media/v4l2-core/videobuf-vmalloc.c index 1365c651c177..2ff7fcc77b11 100644 --- a/drivers/media/v4l2-core/videobuf-vmalloc.c +++ b/drivers/media/v4l2-core/videobuf-vmalloc.c @@ -54,14 +54,11 @@ MODULE_LICENSE("GPL");  static void videobuf_vm_open(struct vm_area_struct *vma)  {  	struct videobuf_mapping *map = vma->vm_private_data; -	struct videobuf_queue *q = map->q;  	dprintk(2, "vm_open %p [count=%u,vma=%08lx-%08lx]\n", map,  		map->count, vma->vm_start, vma->vm_end); -	videobuf_queue_lock(q);  	map->count++; -	videobuf_queue_unlock(q);  }  static void videobuf_vm_close(struct vm_area_struct *vma) @@ -73,11 +70,12 @@ static void videobuf_vm_close(struct vm_area_struct *vma)  	dprintk(2, "vm_close %p [count=%u,vma=%08lx-%08lx]\n", map,  		map->count, vma->vm_start, vma->vm_end); -	videobuf_queue_lock(q); -	if (!--map->count) { +	map->count--; +	if (0 == map->count) {  		struct videobuf_vmalloc_memory *mem;  		dprintk(1, "munmap %p q=%p\n", map, q); +		videobuf_queue_lock(q);  		/* We need first to cancel streams, before unmapping */  		if (q->streaming) @@ -116,8 +114,8 @@ static void videobuf_vm_close(struct vm_area_struct *vma)  		kfree(map); +		videobuf_queue_unlock(q);  	} -	videobuf_queue_unlock(q);  	return;  } diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c index 5a5fb7f09b7b..a127925c9d61 100644 --- a/drivers/media/v4l2-core/videobuf2-core.c +++ b/drivers/media/v4l2-core/videobuf2-core.c @@ -1776,6 +1776,11 @@ static int vb2_internal_streamon(struct vb2_queue *q, enum v4l2_buf_type type)  		return 0;  	} +	if (!q->num_buffers) { +		dprintk(1, "streamon: no buffers have been allocated\n"); +		return -EINVAL; +	} +  	/*  	 * If any buffers were queued before streamon,  	 * we can now pass them to driver for processing.  | 
