[Intel-gfx] [PATCH v5 1/9] drm/i915: Include engine state on detecting a missed breadcrumb/seqno

Chris Wilson chris at chris-wilson.co.uk
Thu Nov 9 11:12:32 UTC 2017


Quoting Mika Kuoppala (2017-11-09 11:03:39)
> Chris Wilson <chris at chris-wilson.co.uk> writes:
> 
> > Now that we have a common engine state pretty printer, we can use that
> > instead of the adhoc information printed when we miss a breadcrumb.
> >
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > Cc: Mika Kuoppala <mika.kuoppala at intel.com>
> > Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_breadcrumbs.c | 11 +++++------
> >  drivers/gpu/drm/i915/intel_engine_cs.c   |  6 ++++++
> >  2 files changed, 11 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_breadcrumbs.c b/drivers/gpu/drm/i915/intel_breadcrumbs.c
> > index 4de054f8c1ba..1e4d2978fb86 100644
> > --- a/drivers/gpu/drm/i915/intel_breadcrumbs.c
> > +++ b/drivers/gpu/drm/i915/intel_breadcrumbs.c
> > @@ -64,12 +64,11 @@ static unsigned long wait_timeout(void)
> >  
> >  static noinline void missed_breadcrumb(struct intel_engine_cs *engine)
> >  {
> > -     DRM_DEBUG_DRIVER("%s missed breadcrumb at %pS, irq posted? %s, current seqno=%x, last=%x\n",
> > -                      engine->name, __builtin_return_address(0),
> > -                      yesno(test_bit(ENGINE_IRQ_BREADCRUMB,
> > -                                     &engine->irq_posted)),
> > -                      intel_engine_get_seqno(engine),
> > -                      intel_engine_last_submit(engine));
> > +     struct drm_printer p = drm_debug_printer(__func__);
> > +
> > +     DRM_DEBUG_DRIVER("%s missed breadcrumb at %pS\n",
> > +                      engine->name, __builtin_return_address(0));
> > +     intel_engine_dump(engine, &p);
> 
> We are holding rb_lock while we enter and the dump will retake it.

Well that's annoying. It also leads to the next point, that
intel_engine_dump() isn't taking the engine->timeline->lock enough.

Good catch, thanks.
 
> We also should add proper asserts to intel_engine_dump that we notice
> immediately if we try to dump on wrong context.

You can't just assert(!spin_locked()) as that gives false positives when
it is in use elsewhere. The answer would be to annotate all spinlocks
with lockdep.
-Chris


More information about the Intel-gfx mailing list