|
@@ -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 = {
|