From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [Intel-gfx] [PATCH] drm/i915: Don't call intel_prepare_page_flip() multiple times on gen2-4 Date: Thu, 18 Dec 2014 12:08:05 +0200 Message-ID: <87mw6l46ey.fsf@intel.com> References: <1418850483-9617-1-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Return-path: In-Reply-To: <1418850483-9617-1-git-send-email-ville.syrjala@linux.intel.com> Sender: stable-owner@vger.kernel.org To: ville.syrjala@linux.intel.com, intel-gfx@lists.freedesktop.org Cc: stable@vger.kernel.org List-Id: intel-gfx@lists.freedesktop.org On Wed, 17 Dec 2014, ville.syrjala@linux.intel.com wrote: > From: Ville Syrj=C3=A4l=C3=A4 > > The flip stall detector kicks in when pending>=3DINTEL_FLIP_COMPLETE.= That > means if we first call intel_prepare_page_flip() but don't call > intel_finish_page_flip(), the next stall check will erroneosly think > the page flip was somehow stuck. > > With enough debug spew emitted from the interrupt handler my 830 hang= s > when this happens. My theory is that the previous vblank interrupt ge= ts > sufficiently delayed that the handler will see the pending bit set in > IIR, but ISR still has the bit set as well (ie. the flip was processe= d > by CS but didn't complete yet). In this case the handler will proceed > to call intel_check_page_flip() immediately after > intel_prepare_page_flip(). It then tries to print a backtrace for the > stuck flip WARN, which apparetly results in way too much debug spew > delaying interrupt processing further. That then seems to cause an > endless loop in the interrupt handler, and the machine is dead until > the watchdog kicks in and reboots. At least limiting the number of > iterations of the loop in the interrupt handler also prevented the > hang. > > So it seems better to not call intel_prepare_page_flip() without > immediately calling intel_finish_page_flip(). The IIR/ISR trickery > avoids races here so this is a perfectly safe thing to do. > > v2: Fix typo in commit message (checkpatch) > > Cc: stable@vger.kernel.org > Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=3D88381 > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=3D85888 > Reviewed-by: Chris Wilson > Signed-off-by: Ville Syrj=C3=A4l=C3=A4 Pushed to drm-intel-next-fixes, thanks for the patch and review. BR, Jani. > --- > drivers/gpu/drm/i915/i915_irq.c | 6 ++---- > 1 file changed, 2 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i= 915_irq.c > index 5d83773..aa3180c 100644 > --- a/drivers/gpu/drm/i915/i915_irq.c > +++ b/drivers/gpu/drm/i915/i915_irq.c > @@ -3731,8 +3731,6 @@ static bool i8xx_handle_vblank(struct drm_devic= e *dev, > if ((iir & flip_pending) =3D=3D 0) > goto check_page_flip; > =20 > - intel_prepare_page_flip(dev, plane); > - > /* We detect FlipDone by looking for the change in PendingFlip from= '1' > * to '0' on the following vblank, i.e. IIR has the Pendingflip > * asserted following the MI_DISPLAY_FLIP, but ISR is deasserted, h= ence > @@ -3742,6 +3740,7 @@ static bool i8xx_handle_vblank(struct drm_devic= e *dev, > if (I915_READ16(ISR) & flip_pending) > goto check_page_flip; > =20 > + intel_prepare_page_flip(dev, plane); > intel_finish_page_flip(dev, pipe); > return true; > =20 > @@ -3913,8 +3912,6 @@ static bool i915_handle_vblank(struct drm_devic= e *dev, > if ((iir & flip_pending) =3D=3D 0) > goto check_page_flip; > =20 > - intel_prepare_page_flip(dev, plane); > - > /* We detect FlipDone by looking for the change in PendingFlip from= '1' > * to '0' on the following vblank, i.e. IIR has the Pendingflip > * asserted following the MI_DISPLAY_FLIP, but ISR is deasserted, h= ence > @@ -3924,6 +3921,7 @@ static bool i915_handle_vblank(struct drm_devic= e *dev, > if (I915_READ(ISR) & flip_pending) > goto check_page_flip; > =20 > + intel_prepare_page_flip(dev, plane); > intel_finish_page_flip(dev, pipe); > return true; > =20 > --=20 > 2.0.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx --=20 Jani Nikula, Intel Open Source Technology Center