| From 53c09e4ab5a802738c4716fe9c88f84452549687 Mon Sep 17 00:00:00 2001 |
| From: Daniel Vetter <daniel.vetter@ffwll.ch> |
| Date: Mon, 22 Jul 2013 12:12:38 +0200 |
| Subject: drm/i915: fix up error cleanup in i915_gem_object_bind_to_gtt |
| |
| This has been broken in |
| |
| commit 2f63315692b1d3c055972ad33fc7168ae908b97b |
| Author: Ben Widawsky <ben@bwidawsk.net> |
| Date: Wed Jul 17 12:19:03 2013 -0700 |
| |
| drm/i915: Create VMAs |
| |
| which resulted in an OOPS the first time around we've hit -ENOSPC. |
| |
| Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=67156 |
| Cc: Imre Deak <imre.deak@intel.com> |
| Cc: Ben Widawsky <ben@bwidawsk.net> |
| Tested-by: meng <mengmeng.meng@intel.com> |
| Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> |
| Reviewed-by: Ben Widawsky <ben@bwidawsk.net> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit bc6bc15bd7d6bbe3dd2da65d1a81a6dec5d0fa94) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/i915_gem.c | 14 ++++++++------ |
| 1 file changed, 8 insertions(+), 6 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c |
| index 37641c014e7a..6703fc35a0b9 100644 |
| --- a/drivers/gpu/drm/i915/i915_gem.c |
| +++ b/drivers/gpu/drm/i915/i915_gem.c |
| @@ -3123,8 +3123,8 @@ i915_gem_object_bind_to_gtt(struct drm_i915_gem_object *obj, |
| |
| vma = i915_gem_vma_create(obj, &dev_priv->gtt.base); |
| if (IS_ERR(vma)) { |
| - i915_gem_object_unpin_pages(obj); |
| - return PTR_ERR(vma); |
| + ret = PTR_ERR(vma); |
| + goto err_unpin; |
| } |
| |
| search_free: |
| @@ -3140,17 +3140,17 @@ search_free: |
| if (ret == 0) |
| goto search_free; |
| |
| - goto err_out; |
| + goto err_free_vma; |
| } |
| if (WARN_ON(!i915_gem_valid_gtt_space(dev, &vma->node, |
| obj->cache_level))) { |
| ret = -EINVAL; |
| - goto err_out; |
| + goto err_remove_node; |
| } |
| |
| ret = i915_gem_gtt_prepare_object(obj); |
| if (ret) |
| - goto err_out; |
| + goto err_remove_node; |
| |
| list_move_tail(&obj->global_list, &dev_priv->mm.bound_list); |
| list_add_tail(&obj->mm_list, &vm->inactive_list); |
| @@ -3169,9 +3169,11 @@ search_free: |
| i915_gem_verify_gtt(dev); |
| return 0; |
| |
| -err_out: |
| +err_remove_node: |
| drm_mm_remove_node(&vma->node); |
| +err_free_vma: |
| i915_gem_vma_destroy(vma); |
| +err_unpin: |
| i915_gem_object_unpin_pages(obj); |
| return ret; |
| } |
| -- |
| 1.8.5.rc3 |
| |