From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH] drm/i915: fix up error cleanup in i915_gem_object_bind_to_gtt Date: Mon, 22 Jul 2013 23:02:08 +0200 Message-ID: <20130722210208.GC5939@phenom.ffwll.local> References: <1374487958-18999-1-git-send-email-daniel.vetter@ffwll.ch> <20130722201230.GE7663@bwidawsk.net> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail-ee0-f54.google.com (mail-ee0-f54.google.com [74.125.83.54]) by gabe.freedesktop.org (Postfix) with ESMTP id E66A1E60E7 for ; Mon, 22 Jul 2013 14:02:10 -0700 (PDT) Received: by mail-ee0-f54.google.com with SMTP id t10so4078831eei.41 for ; Mon, 22 Jul 2013 14:02:10 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20130722201230.GE7663@bwidawsk.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: Ben Widawsky Cc: Daniel Vetter , Intel Graphics Development List-Id: intel-gfx@lists.freedesktop.org On Mon, Jul 22, 2013 at 01:12:30PM -0700, Ben Widawsky wrote: > On Mon, Jul 22, 2013 at 12:12:38PM +0200, Daniel Vetter wrote: > > This has been broken in > > > > commit 2f63315692b1d3c055972ad33fc7168ae908b97b > > Author: Ben Widawsky > > 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 > > Cc: Ben Widawsky > > Tested-by: meng > > Signed-off-by: Daniel Vetter > > --- > > 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 cfa6588..c87a6ec 100644 > > --- a/drivers/gpu/drm/i915/i915_gem.c > > +++ b/drivers/gpu/drm/i915/i915_gem.c > > @@ -3121,8 +3121,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; > > } > > Adding the extra goto here seems pointless to me. Like explained on irc, that's just to have a nice OCD reverse err_foo: label stacking at the end of the function. > > > > > search_free: > > @@ -3138,17 +3138,17 @@ search_free: > > if (ret == 0) > > goto search_free; > > > > - goto err_out; > > + goto err_free_vma; > > } > > My preference would be to exit early in drm_mm_remove_node() if the node > isn't allocated. I think at least we should add a WARN to > drm_mm_remove_node if the node->allocated == 0. Hm, good idea. I'll create a quick patch. > > 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); > > @@ -3167,9 +3167,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; > > } > > Reviewed-by: Ben Widawsky Queued for -next, thanks for the review. -Daniel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch