Message ID | 1417740959-342-1-git-send-email-weiyj_lk@163.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Wei Yongjun, On Fri, Dec 05, 2014 at 08:55:59AM +0800, weiyj_lk@163.com wrote: > From: Wei Yongjun <yongjun_wei@trendmicro.com.cn> > > Add the missing unlock before return from function i915_gem_init_hw() > in the error handling case. > > Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn> > --- > drivers/gpu/drm/i915/i915_gem.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index d2ba315..3eeb2d0 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -4879,8 +4879,10 @@ i915_gem_init_hw(struct drm_device *dev) > i915_gem_init_swizzling(dev); > > ret = dev_priv->gt.init_rings(dev); > - if (ret) > + if (ret) { > + mutex_unlock(&dev->struct_mutex); > return ret; > + } > There are other places in i915_gem_init_hw() where it returns without unlocking the mutex. Why is it only necessary here and not any of the other places? > for (i = 0; i < NUM_L3_SLICES(dev); i++) > i915_gem_l3_remap(&dev_priv->ring[RCS], i); > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/
On Fri, 05 Dec 2014, Jeremiah Mahler <jmmahler@gmail.com> wrote: > There are other places in i915_gem_init_hw() where it returns without > unlocking the mutex. Why is it only necessary here and not any of the > other places? There's probably some rebase/merge confusion going on. The following patch is against drm-intel-next-queued where the problem is present. Thanks for reporting this. BR, Jani. Jani Nikula (1): drm/i915: release struct_mutex on the i915_gem_init_hw fail path drivers/gpu/drm/i915/i915_gem.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-)
On Fri, 05 Dec 2014, Jeremiah Mahler <jmmahler@gmail.com> wrote: > There are other places in i915_gem_init_hw() where it returns without > unlocking the mutex. Why is it only necessary here and not any of the > other places? There's probably some rebase/merge confusion going on. The following patch is against drm-intel-next-queued where the problem is present. Thanks for reporting this. BR, Jani. Jani Nikula (1): drm/i915: release struct_mutex on the i915_gem_init_hw fail path drivers/gpu/drm/i915/i915_gem.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-)
On Fri, Dec 05, 2014 at 08:55:59AM +0800, weiyj_lk@163.com wrote: > From: Wei Yongjun <yongjun_wei@trendmicro.com.cn> > > Add the missing unlock before return from function i915_gem_init_hw() > in the error handling case. > > Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn> Applied, thanks for the patch. Two minor comments: - Please mention the commit that introduced the issue next time around. I've added that while applying. - The usual patter is if (ret) goto out; /* more code */ out: mutex_unlock(); return ret; This would work really well in i915_gem_init_hw and besides the code-cleanup also prevents such a fumble in the future. If you feel like please submit that patch to convert init_hw to this shared unlock code pattern, too. Thanks, Daniel > --- > drivers/gpu/drm/i915/i915_gem.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index d2ba315..3eeb2d0 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -4879,8 +4879,10 @@ i915_gem_init_hw(struct drm_device *dev) > i915_gem_init_swizzling(dev); > > ret = dev_priv->gt.init_rings(dev); > - if (ret) > + if (ret) { > + mutex_unlock(&dev->struct_mutex); > return ret; > + } > > for (i = 0; i < NUM_L3_SLICES(dev); i++) > i915_gem_l3_remap(&dev_priv->ring[RCS], i); > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index d2ba315..3eeb2d0 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -4879,8 +4879,10 @@ i915_gem_init_hw(struct drm_device *dev) i915_gem_init_swizzling(dev); ret = dev_priv->gt.init_rings(dev); - if (ret) + if (ret) { + mutex_unlock(&dev->struct_mutex); return ret; + } for (i = 0; i < NUM_L3_SLICES(dev); i++) i915_gem_l3_remap(&dev_priv->ring[RCS], i);