diff options
Diffstat (limited to 'drivers/media/v4l2-core/videobuf-vmalloc.c')
| -rw-r--r-- | drivers/media/v4l2-core/videobuf-vmalloc.c | 10 | 
1 files changed, 4 insertions, 6 deletions
diff --git a/drivers/media/v4l2-core/videobuf-vmalloc.c b/drivers/media/v4l2-core/videobuf-vmalloc.c index 1365c651c17..2ff7fcc77b1 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;  }  | 
