diff options
author | Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> | 2013-04-16 08:21:23 -0400 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> | 2013-06-08 03:14:04 -0400 |
commit | bda3fdaa0f43fc7faaf07b4fc4f2bc4daea12451 (patch) | |
tree | 182799500446f3c2522439820da8d961b3901eda /drivers | |
parent | 1c5aafa6eee2d5712f774676d407e5ab6dae9a1b (diff) |
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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c | 32 |
1 files changed, 3 insertions, 29 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c index be7cd97a0db0..3256693de110 100644 --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c | |||
@@ -136,10 +136,6 @@ static void omap_gem_dmabuf_kunmap(struct dma_buf *buffer, | |||
136 | kunmap(pages[page_num]); | 136 | kunmap(pages[page_num]); |
137 | } | 137 | } |
138 | 138 | ||
139 | /* | ||
140 | * TODO maybe we can split up drm_gem_mmap to avoid duplicating | ||
141 | * some here.. or at least have a drm_dmabuf_mmap helper. | ||
142 | */ | ||
143 | static int omap_gem_dmabuf_mmap(struct dma_buf *buffer, | 139 | static int omap_gem_dmabuf_mmap(struct dma_buf *buffer, |
144 | struct vm_area_struct *vma) | 140 | struct vm_area_struct *vma) |
145 | { | 141 | { |
@@ -149,31 +145,9 @@ static int omap_gem_dmabuf_mmap(struct dma_buf *buffer, | |||
149 | if (WARN_ON(!obj->filp)) | 145 | if (WARN_ON(!obj->filp)) |
150 | return -EINVAL; | 146 | return -EINVAL; |
151 | 147 | ||
152 | /* Check for valid size. */ | 148 | ret = drm_gem_mmap_obj(obj, omap_gem_mmap_size(obj), vma); |
153 | if (omap_gem_mmap_size(obj) < vma->vm_end - vma->vm_start) { | 149 | if (ret < 0) |
154 | ret = -EINVAL; | 150 | return ret; |
155 | goto out_unlock; | ||
156 | } | ||
157 | |||
158 | if (!obj->dev->driver->gem_vm_ops) { | ||
159 | ret = -EINVAL; | ||
160 | goto out_unlock; | ||
161 | } | ||
162 | |||
163 | vma->vm_flags |= VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP; | ||
164 | vma->vm_ops = obj->dev->driver->gem_vm_ops; | ||
165 | vma->vm_private_data = obj; | ||
166 | vma->vm_page_prot = pgprot_writecombine(vm_get_page_prot(vma->vm_flags)); | ||
167 | |||
168 | /* Take a ref for this mapping of the object, so that the fault | ||
169 | * handler can dereference the mmap offset's pointer to the object. | ||
170 | * This reference is cleaned up by the corresponding vm_close | ||
171 | * (which should happen whether the vma was created by this call, or | ||
172 | * by a vm_open due to mremap or partial unmap or whatever). | ||
173 | */ | ||
174 | vma->vm_ops->open(vma); | ||
175 | |||
176 | out_unlock: | ||
177 | 151 | ||
178 | return omap_gem_mmap_obj(obj, vma); | 152 | return omap_gem_mmap_obj(obj, vma); |
179 | } | 153 | } |