drm/omap: Use drm_gem_mmap_obj() to implement dma-buf mmap
The dma-buf mmap code was copied from the GEM mmap implementation. Replace it with the new drm_gem_mmap_obj() function. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Reviewed-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
parent
1c5aafa6ee
commit
bda3fdaa0f
|
@ -136,10 +136,6 @@ static void omap_gem_dmabuf_kunmap(struct dma_buf *buffer,
|
|||
kunmap(pages[page_num]);
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO maybe we can split up drm_gem_mmap to avoid duplicating
|
||||
* some here.. or at least have a drm_dmabuf_mmap helper.
|
||||
*/
|
||||
static int omap_gem_dmabuf_mmap(struct dma_buf *buffer,
|
||||
struct vm_area_struct *vma)
|
||||
{
|
||||
|
@ -149,31 +145,9 @@ static int omap_gem_dmabuf_mmap(struct dma_buf *buffer,
|
|||
if (WARN_ON(!obj->filp))
|
||||
return -EINVAL;
|
||||
|
||||
/* Check for valid size. */
|
||||
if (omap_gem_mmap_size(obj) < vma->vm_end - vma->vm_start) {
|
||||
ret = -EINVAL;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
if (!obj->dev->driver->gem_vm_ops) {
|
||||
ret = -EINVAL;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
vma->vm_flags |= VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP;
|
||||
vma->vm_ops = obj->dev->driver->gem_vm_ops;
|
||||
vma->vm_private_data = obj;
|
||||
vma->vm_page_prot = pgprot_writecombine(vm_get_page_prot(vma->vm_flags));
|
||||
|
||||
/* Take a ref for this mapping of the object, so that the fault
|
||||
* handler can dereference the mmap offset's pointer to the object.
|
||||
* This reference is cleaned up by the corresponding vm_close
|
||||
* (which should happen whether the vma was created by this call, or
|
||||
* by a vm_open due to mremap or partial unmap or whatever).
|
||||
*/
|
||||
vma->vm_ops->open(vma);
|
||||
|
||||
out_unlock:
|
||||
ret = drm_gem_mmap_obj(obj, omap_gem_mmap_size(obj), vma);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return omap_gem_mmap_obj(obj, vma);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue