[Intel-gfx] [PATCH 07/10] drm/i915/gt: Hold context/request reference while breadcrumbs are active
Chris Wilson
chris at chris-wilson.co.uk
Wed Jul 22 13:11:49 UTC 2020
Quoting Tvrtko Ursulin (2020-07-22 14:05:35)
>
> On 20/07/2020 10:23, Chris Wilson wrote:
> > @@ -198,7 +217,8 @@ static void signal_irq_work(struct irq_work *work)
> > * spinlock as the callback chain may end up adding
> > * more signalers to the same context or engine.
> > */
> > - __signal_request(rq, &signal);
> > + if (!__signal_request(rq, &signal))
> > + i915_request_put(rq);
>
> Looks like __signal_request could do the request put but doesn't matter
> hugely.
I ditch the __signal_request() wrapper as the two callers diverge a bit
more.
1:
clear_bit(I915_FENCE_FLAG_SIGNAL, &rq->fence.flags);
if (__dma_fence_signal(&rq->fence)) {
rq->signal_node.next = signal;
signal = &rq->signal_node;
} else {
i915_request_put(rq);
}
2:
if (__request_completed(rq)) {
if (__dma_fence_signal(&rq->fence)) {
if (llist_add(&rq->signal_node, &b->signaled_requests))
irq_work_queue(&b->irq_work);
} else {
i915_request_put(rq);
}
return;
}
Not completely sold on that though. Keeping the i915_request_put() as
part of __signal_request() would remove the duplicate line there.
-Chris
More information about the Intel-gfx
mailing list