Re: [PATCH] drm/i915/execlists: Flush GTIIR on clearing CS interrupts during reset

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Quoting Michel Thierry (2018-02-02 16:49:49)
> On 2/2/2018 6:54 AM, Chris Wilson wrote:
> > Be paranoid and flush the GTIIR after clearing the CS interrupt to be
> > sure it has taken before we re-enable the interrupt handler. We still
> > see early interrupts following reset, the tasklet handling the mmio read
> > before it has been written by the CS. This hopefully reduces the
> > frequency to 0...
> > 
> > References: https://bugs.freedesktop.org/show_bug.cgi?id=104262
> > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx>
> > Cc: Mika Kuoppala <mika.kuoppala@xxxxxxxxxxxxxxx>
> > Cc: Michel Thierry <michel.thierry@xxxxxxxxx>
> > Cc: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx>
> > ---
> >   drivers/gpu/drm/i915/intel_lrc.c | 13 +++++++++----
> >   1 file changed, 9 insertions(+), 4 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
> > index 40dbeaee9dfa..deeedfc9fe44 100644
> > --- a/drivers/gpu/drm/i915/intel_lrc.c
> > +++ b/drivers/gpu/drm/i915/intel_lrc.c
> > @@ -1527,6 +1527,7 @@ static int gen9_init_render_ring(struct intel_engine_cs *engine)
> >   static void reset_irq(struct intel_engine_cs *engine)
> >   {
> >       struct drm_i915_private *dev_priv = engine->i915;
> > +     int i;
> >   
> >       /*
> >        * Clear any pending interrupt state.
> > @@ -1535,10 +1536,14 @@ static void reset_irq(struct intel_engine_cs *engine)
> >        * buffered, and if we only reset it once there may still be
> >        * an interrupt pending.
> >        */
> > -     I915_WRITE(GEN8_GT_IIR(gtiir[engine->id]),
> > -                GT_CONTEXT_SWITCH_INTERRUPT << engine->irq_shift);
> > -     I915_WRITE(GEN8_GT_IIR(gtiir[engine->id]),
> > -                GT_CONTEXT_SWITCH_INTERRUPT << engine->irq_shift);
> > +     for (i = 0; i < 2; i++) {
> > +             I915_WRITE(GEN8_GT_IIR(gtiir[engine->id]),
> > +                        GT_CONTEXT_SWITCH_INTERRUPT << engine->irq_shift);
> > +             POSTING_READ(GEN8_GT_IIR(gtiir[engine->id]));
> > +     }
> > +     GEM_BUG_ON(I915_READ(GEN8_GT_IIR(gtiir[engine->id])) &
> > +                (GT_CONTEXT_SWITCH_INTERRUPT << engine->irq_shift));
> > +
> >       clear_bit(ENGINE_IRQ_EXECLIST, &engine->irq_posted);
> >   }
> >   
> > 
> 
> Acked-by: Michel Thierry <michel.thierry@xxxxxxxxx>

Ta. Afaict, it's a timing issue and this is helping paper over it. Not a
fix, but maybe an indicator for someone to find the real problem?
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux