[Intel-gfx] [PATCH] drm/i915: Record the current requests queue for execlists upon hang

Chris Wilson chris at chris-wilson.co.uk
Thu Oct 13 10:16:12 UTC 2016


On Thu, Oct 13, 2016 at 12:51:26PM +0300, Mika Kuoppala wrote:
> Chris Wilson <chris at chris-wilson.co.uk> writes:
> > +static void record_request(struct drm_i915_gem_request *request,
> > +			   struct drm_i915_error_request *erq)
> > +{
> > +	erq->context = request->ctx->hw_id;
> > +	erq->seqno = request->fence.seqno;
> > +	erq->jiffies = request->emitted_jiffies;
> > +	erq->head = request->head;
> > +	erq->tail = request->tail;
> > +
> > +	rcu_read_lock();
> > +	erq->pid = request->ctx->pid ? pid_nr(request->ctx->pid) : 0;
> 
> This lock is only for the pid_nr and nothing to do with ctx dereference?
> Not that it was added by this patch...

It's for the struct task lookup inside pid_nr.

But...

> > +	for (n = 0; n < ARRAY_SIZE(engine->execlist_port); n++)
> > +		if (engine->execlist_port[n].request)
> > +			record_request(engine->execlist_port[n].request,
> > +				       &ee->execlist[n]);
> 
> Ok even if we get interrupt at around here and reset the ports,
> the pointer should stay in request_list and at that part we should be
> safe.

Note that we don't even get interrupts anymore as we completely stop the
machine whilst capturing. So even rcu_read_lock() above is overkill,
mere documentation.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the Intel-gfx mailing list