| From 3b60a60a94a9952eefc3676334324139076c3186 Mon Sep 17 00:00:00 2001 |
| From: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> |
| Date: Tue, 16 Apr 2013 14:32:34 +0200 |
| Subject: drm: GEM CMA: Split object mapping into GEM mapping and CMA mapping |
| |
| 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> |
| (cherry picked from commit ebaf9e033e6dc9b584176c1731f4e07360d4d231) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| drivers/gpu/drm/drm_gem_cma_helper.c | 22 +++++++++++++++------- |
| 1 file changed, 15 insertions(+), 7 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c b/drivers/gpu/drm/drm_gem_cma_helper.c |
| index 8cce3302b690..7a4db4e7a1ea 100644 |
| --- a/drivers/gpu/drm/drm_gem_cma_helper.c |
| +++ b/drivers/gpu/drm/drm_gem_cma_helper.c |
| @@ -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); |
| |
| -- |
| 1.8.5.rc3 |
| |