| From 3331761cbf57b3819e5075eef1bfc42e58bd8f20 Mon Sep 17 00:00:00 2001 |
| From: David Herrmann <dh.herrmann@gmail.com> |
| Date: Fri, 26 Jul 2013 12:09:32 +0200 |
| Subject: drm/gem: fix mmap vma size calculations |
| |
| The VMA manager is page-size based so drm_vma_node_size() returns the size |
| in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply |
| PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small |
| buffers. |
| |
| This bug was introduced in commit: |
| 0de23977cfeb5b357ec884ba15417ae118ff9e9b |
| "drm/gem: convert to new unified vma manager" |
| |
| Fixes i915 gtt mmap failure reported by Sedat Dilek in: |
| Re: linux-next: Tree for Jul 25 [ call-trace: drm | drm-intel related? ] |
| |
| Cc: Daniel Vetter <daniel.vetter@ffwll.ch> |
| Cc: Chris Wilson <chris@chris-wilson.co.uk> |
| Signed-off-by: David Herrmann <dh.herrmann@gmail.com> |
| Reported-by: Sedat Dilek <sedat.dilek@gmail.com> |
| Tested-by: Sedat Dilek <sedat.dilek@gmail.com> |
| Signed-off-by: Dave Airlie <airlied@gmail.com> |
| (cherry picked from commit aed2c03c8d96ea471b86761129c213e05ab6fbef) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/drm_gem.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c |
| index d1ba36512fe4..2688795172f9 100644 |
| --- a/drivers/gpu/drm/drm_gem.c |
| +++ b/drivers/gpu/drm/drm_gem.c |
| @@ -662,7 +662,7 @@ int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma) |
| } |
| |
| obj = container_of(node, struct drm_gem_object, vma_node); |
| - ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node), vma); |
| + ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node) << PAGE_SHIFT, vma); |
| |
| mutex_unlock(&dev->struct_mutex); |
| |
| -- |
| 1.8.5.rc3 |
| |