drm/omap: Use drm_gem_mmap_obj() to implement dma-buf mmap
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Tue, 16 Apr 2013 12:21:23 +0000 (14:21 +0200)
committerJoonyoung Shim <jy0922.shim@samsung.com>
Wed, 13 Jan 2016 01:29:03 +0000 (10:29 +0900)
The dma-buf mmap code was copied from the GEM mmap implementation.
Replace it with the new drm_gem_mmap_obj() function.

Change-Id: I5dd5b285891debd85f458b66e0f3778d8dcec8d5
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Rob Clark <robdclark@gmail.com>
drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c

index be7cd97..3256693 100644 (file)
@@ -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);
 }