From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f68.google.com ([74.125.82.68]:36666 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965448AbcDMJdo (ORCPT ); Wed, 13 Apr 2016 05:33:44 -0400 Received: by mail-wm0-f68.google.com with SMTP id l6so12209740wml.3 for ; Wed, 13 Apr 2016 02:33:43 -0700 (PDT) Date: Wed, 13 Apr 2016 11:34:00 +0200 From: Daniel Vetter To: Chris Wilson Cc: intel-gfx@lists.freedesktop.org, stable@vger.kernel.org Subject: Re: [Intel-gfx] [CI-ping 12/15] drm/i915: Force ringbuffers to not be at offset 0 Message-ID: <20160413093400.GQ2510@phenom.ffwll.local> References: <1460491389-8602-1-git-send-email-chris@chris-wilson.co.uk> <1460491389-8602-12-git-send-email-chris@chris-wilson.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1460491389-8602-12-git-send-email-chris@chris-wilson.co.uk> Sender: stable-owner@vger.kernel.org List-ID: On Tue, Apr 12, 2016 at 09:03:06PM +0100, Chris Wilson wrote: > For reasons unknown Sandybridge GT1 (at least) will eventually hang when > it encounters a ring wraparound at offset 0. The test case that > reproduces the bug reliably forces a large number of interrupted context > switches, thereby causing very frequent ring wraparounds, but there are > similar bug reports in the wild with the same symptoms, seqno writes > stop just before the wrap and the ringbuffer at address 0. It is also > timing crucial, but adding various delays hasn't helped pinpoint where > the window lies. > > Whether the fault is restricted to the ringbuffer itself or the GTT > addressing is unclear, but moving the ringbuffer fixes all the hangs I > have been able to reproduce. > > References: (e.g.) https://bugs.freedesktop.org/show_bug.cgi?id=93262 > Testcase: igt/gem_exec_whisper/render-contexts-interruptible #snb-gt1 > Signed-off-by: Chris Wilson > Cc: stable@vger.kernel.org Acked-by: Daniel Vetter > --- > drivers/gpu/drm/i915/intel_ringbuffer.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c > index 8391382431b2..904a8a276f6a 100644 > --- a/drivers/gpu/drm/i915/intel_ringbuffer.c > +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c > @@ -2096,10 +2096,12 @@ int intel_pin_and_map_ringbuffer_obj(struct drm_device *dev, > struct drm_i915_private *dev_priv = to_i915(dev); > struct i915_ggtt *ggtt = &dev_priv->ggtt; > struct drm_i915_gem_object *obj = ringbuf->obj; > + /* Ring wraparound at offset 0 sometimes hangs. No idea why. */ > + unsigned flags = PIN_OFFSET_BIAS | 4096; > int ret; > > if (HAS_LLC(dev_priv) && !obj->stolen) { > - ret = i915_gem_obj_ggtt_pin(obj, PAGE_SIZE, 0); > + ret = i915_gem_obj_ggtt_pin(obj, PAGE_SIZE, flags); > if (ret) > return ret; > > @@ -2113,7 +2115,8 @@ int intel_pin_and_map_ringbuffer_obj(struct drm_device *dev, > goto err_unpin; > } > } else { > - ret = i915_gem_obj_ggtt_pin(obj, PAGE_SIZE, PIN_MAPPABLE); > + ret = i915_gem_obj_ggtt_pin(obj, PAGE_SIZE, > + flags | PIN_MAPPABLE); > if (ret) > return ret; > > -- > 2.8.0.rc3 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch