[Intel-gfx] [PATCH 8/8] drm/i915: Show waiters in i915_hangcheck_info

Chris Wilson chris at chris-wilson.co.uk
Tue Oct 4 13:07:10 UTC 2016


On Tue, Oct 04, 2016 at 03:41:24PM +0300, Mika Kuoppala wrote:
> Chris Wilson <chris at chris-wilson.co.uk> writes:
> 
> The commit message is missing.
> 
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > ---
> >  drivers/gpu/drm/i915/i915_debugfs.c | 12 ++++++++++++
> >  1 file changed, 12 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> > index 9c95ce73f2aa..39b76c24c84f 100644
> > --- a/drivers/gpu/drm/i915/i915_debugfs.c
> > +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> > @@ -1343,6 +1343,9 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)
> >  		seq_printf(m, "Hangcheck inactive\n");
> >  
> >  	for_each_engine_id(engine, dev_priv, id) {
> > +		struct intel_breadcrumbs *b = &engine->breadcrumbs;
> > +		struct rb_node *rb;
> > +
> >  		seq_printf(m, "%s:\n", engine->name);
> >  		seq_printf(m, "\tseqno = %x [current %x, last %x]\n",
> >  			   engine->hangcheck.seqno,
> > @@ -1352,6 +1355,15 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)
> >  			   yesno(intel_engine_has_waiter(engine)),
> >  			   yesno(test_bit(engine->id,
> >  					  &dev_priv->gpu_error.missed_irq_rings)));
> > +		spin_lock(&b->lock);
> > +		for (rb = rb_first(&b->waiters); rb; rb = rb_next(rb)) {
> 
> The waiters are embeddded in requests? So we need the rcu_read_lock?

spin_lock outweighs rcu_read_lock, but the waiters are in a separate
per-engine list guarded by the breadcrumbs.lock, we need the spin lock
here.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the Intel-gfx mailing list