drm: GEM CMA: Split object mapping into GEM mapping and CMA mapping
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Tue, 16 Apr 2013 12:32:34 +0000 (14:32 +0200)
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Sat, 8 Jun 2013 07:14:05 +0000 (09:14 +0200)
The CMA-specific mapping code will be used to implement dma-buf mmap
support.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Rob Clark <robdclark@gmail.com>
drivers/gpu/drm/drm_gem_cma_helper.c

index 8cce3302b690ced91b1cccfdcfd660e4e5f81c58..7a4db4e7a1ea599605bed8495368af9b9b8d81cc 100644 (file)
@@ -228,13 +228,26 @@ const struct vm_operations_struct drm_gem_cma_vm_ops = {
 };
 EXPORT_SYMBOL_GPL(drm_gem_cma_vm_ops);
 
+static int drm_gem_cma_mmap_obj(struct drm_gem_cma_object *cma_obj,
+                               struct vm_area_struct *vma)
+{
+       int ret;
+
+       ret = remap_pfn_range(vma, vma->vm_start, cma_obj->paddr >> PAGE_SHIFT,
+                       vma->vm_end - vma->vm_start, vma->vm_page_prot);
+       if (ret)
+               drm_gem_vm_close(vma);
+
+       return ret;
+}
+
 /*
  * drm_gem_cma_mmap - (struct file_operation)->mmap callback function
  */
 int drm_gem_cma_mmap(struct file *filp, struct vm_area_struct *vma)
 {
-       struct drm_gem_object *gem_obj;
        struct drm_gem_cma_object *cma_obj;
+       struct drm_gem_object *gem_obj;
        int ret;
 
        ret = drm_gem_mmap(filp, vma);
@@ -244,12 +257,7 @@ int drm_gem_cma_mmap(struct file *filp, struct vm_area_struct *vma)
        gem_obj = vma->vm_private_data;
        cma_obj = to_drm_gem_cma_obj(gem_obj);
 
-       ret = remap_pfn_range(vma, vma->vm_start, cma_obj->paddr >> PAGE_SHIFT,
-                       vma->vm_end - vma->vm_start, vma->vm_page_prot);
-       if (ret)
-               drm_gem_vm_close(vma);
-
-       return ret;
+       return drm_gem_cma_mmap_obj(cma_obj, vma);
 }
 EXPORT_SYMBOL_GPL(drm_gem_cma_mmap);