[Intel-gfx] [PATCH 16/21] drm/i915/gt: Track signaled breadcrumbs outside of the breadcrumb spinlock
Chris Wilson
chris at chris-wilson.co.uk
Fri Jul 31 15:12:32 UTC 2020
Quoting Tvrtko Ursulin (2020-07-31 16:06:55)
>
> On 30/07/2020 10:37, Chris Wilson wrote:
> > @@ -191,17 +188,19 @@ static void signal_irq_work(struct irq_work *work)
> > {
> > struct intel_breadcrumbs *b = container_of(work, typeof(*b), irq_work);
> > const ktime_t timestamp = ktime_get();
> > + struct llist_node *signal, *sn;
> > struct intel_context *ce, *cn;
> > struct list_head *pos, *next;
> > - LIST_HEAD(signal);
> > +
> > + signal = NULL;
> > + if (unlikely(!llist_empty(&b->signaled_requests)))
> > + signal = llist_del_all(&b->signaled_requests);
> >
> > spin_lock(&b->irq_lock);
> >
> > - if (list_empty(&b->signalers))
> > + if (!signal && list_empty(&b->signalers))
>
> The only open from previous round was on this change. If I understood
> your previous reply correctly, checking this or not simply controls the
> disarm point and is not related to this patch. With the check added now
> we would disarm later, because even already signaled requests would keep
> it armed. I would prefer this was a separate patch if you could possibly
> be convinced.
I considered that since we add to the lockless list and then queue the
irq work, that is a path that is not driven by the interrupt and so
causing an issue with the idea of the interrupt shadow. Having a simple
test I thought was a positive side-effect to filter out the early
irq_work.
-Chris
More information about the Intel-gfx
mailing list