diff options
| -rw-r--r-- | drivers/media/v4l2-core/videobuf2-dma-contig.c | 28 | ||||
| -rw-r--r-- | drivers/media/v4l2-core/videobuf2-memops.c | 40 | ||||
| -rw-r--r-- | include/media/videobuf2-memops.h | 5 | 
3 files changed, 26 insertions, 47 deletions
diff --git a/drivers/media/v4l2-core/videobuf2-dma-contig.c b/drivers/media/v4l2-core/videobuf2-dma-contig.c index a5804cf12c7c..7fc71a0906db 100644 --- a/drivers/media/v4l2-core/videobuf2-dma-contig.c +++ b/drivers/media/v4l2-core/videobuf2-dma-contig.c @@ -178,14 +178,38 @@ static void *vb2_dc_alloc(void *alloc_ctx, unsigned long size)  static int vb2_dc_mmap(void *buf_priv, struct vm_area_struct *vma)  {  	struct vb2_dc_buf *buf = buf_priv; +	int ret;  	if (!buf) {  		printk(KERN_ERR "No buffer to map\n");  		return -EINVAL;  	} -	return vb2_mmap_pfn_range(vma, buf->dma_addr, buf->size, -				  &vb2_common_vm_ops, &buf->handler); +	/* +	 * dma_mmap_* uses vm_pgoff as in-buffer offset, but we want to +	 * map whole buffer +	 */ +	vma->vm_pgoff = 0; + +	ret = dma_mmap_coherent(buf->dev, vma, buf->vaddr, +		buf->dma_addr, buf->size); + +	if (ret) { +		pr_err("Remapping memory failed, error: %d\n", ret); +		return ret; +	} + +	vma->vm_flags		|= VM_DONTEXPAND | VM_DONTDUMP; +	vma->vm_private_data	= &buf->handler; +	vma->vm_ops		= &vb2_common_vm_ops; + +	vma->vm_ops->open(vma); + +	pr_debug("%s: mapped dma addr 0x%08lx at 0x%08lx, size %ld\n", +		__func__, (unsigned long)buf->dma_addr, vma->vm_start, +		buf->size); + +	return 0;  }  /*********************************************/ diff --git a/drivers/media/v4l2-core/videobuf2-memops.c b/drivers/media/v4l2-core/videobuf2-memops.c index 051ea3571b20..81c1ad8b2cf1 100644 --- a/drivers/media/v4l2-core/videobuf2-memops.c +++ b/drivers/media/v4l2-core/videobuf2-memops.c @@ -137,46 +137,6 @@ int vb2_get_contig_userptr(unsigned long vaddr, unsigned long size,  EXPORT_SYMBOL_GPL(vb2_get_contig_userptr);  /** - * vb2_mmap_pfn_range() - map physical pages to userspace - * @vma:	virtual memory region for the mapping - * @paddr:	starting physical address of the memory to be mapped - * @size:	size of the memory to be mapped - * @vm_ops:	vm operations to be assigned to the created area - * @priv:	private data to be associated with the area - * - * Returns 0 on success. - */ -int vb2_mmap_pfn_range(struct vm_area_struct *vma, unsigned long paddr, -				unsigned long size, -				const struct vm_operations_struct *vm_ops, -				void *priv) -{ -	int ret; - -	size = min_t(unsigned long, vma->vm_end - vma->vm_start, size); - -	vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); -	ret = remap_pfn_range(vma, vma->vm_start, paddr >> PAGE_SHIFT, -				size, vma->vm_page_prot); -	if (ret) { -		printk(KERN_ERR "Remapping memory failed, error: %d\n", ret); -		return ret; -	} - -	vma->vm_flags		|= VM_DONTEXPAND | VM_DONTDUMP; -	vma->vm_private_data	= priv; -	vma->vm_ops		= vm_ops; - -	vma->vm_ops->open(vma); - -	pr_debug("%s: mapped paddr 0x%08lx at 0x%08lx, size %ld\n", -			__func__, paddr, vma->vm_start, size); - -	return 0; -} -EXPORT_SYMBOL_GPL(vb2_mmap_pfn_range); - -/**   * vb2_common_vm_open() - increase refcount of the vma   * @vma:	virtual memory region for the mapping   * diff --git a/include/media/videobuf2-memops.h b/include/media/videobuf2-memops.h index 84e1f6c031c5..f05444ca8c0c 100644 --- a/include/media/videobuf2-memops.h +++ b/include/media/videobuf2-memops.h @@ -33,11 +33,6 @@ extern const struct vm_operations_struct vb2_common_vm_ops;  int vb2_get_contig_userptr(unsigned long vaddr, unsigned long size,  			   struct vm_area_struct **res_vma, dma_addr_t *res_pa); -int vb2_mmap_pfn_range(struct vm_area_struct *vma, unsigned long paddr, -				unsigned long size, -				const struct vm_operations_struct *vm_ops, -				void *priv); -  struct vm_area_struct *vb2_get_vma(struct vm_area_struct *vma);  void vb2_put_vma(struct vm_area_struct *vma);  | 
