[Intel-gfx] [PATCH 5/5] drm/i915: Prioritise non-busywait semaphore workloads

Chris Wilson chris at chris-wilson.co.uk
Fri Mar 1 12:00:04 UTC 2019


Quoting Tvrtko Ursulin (2019-03-01 11:48:25)
> 
> On 01/03/2019 11:05, Chris Wilson wrote:
> > @@ -69,6 +70,10 @@ bool __i915_sched_node_add_dependency(struct i915_sched_node *node,
> >               dep->signaler = signal;
> >               dep->flags = flags;
> >   
> > +             /* Keep track of whether anyone on this chain has a semaphore */
> > +             if (signal->semaphore && !node_started(signal))
> > +                     node->semaphore |= signal->semaphore << 1;
> 
> Maybe I am confused.. this moves the bit flag to the left. Can't it fall 
> off the end and we end up with zero after a deep enough chain?

Yup. I was working on the likelihood of that happening being small
enough to below the level of care :)

The semaphore being 64 requests ago and still not retired? That's like
igt levels of stress :)

Hmm, at one point I was using the history to determine whether this
request itself had a semaphore, but that's gone. So we can just use

if (signal->semaphore && !node_started(signal))
	node->semaphore |= signal->semaphore;

> > @@ -74,6 +75,8 @@ struct i915_sched_node {
> >       struct list_head waiters_list; /* those after us, they depend upon us */
> >       struct list_head link;
> >       struct i915_sched_attr attr;
> > +     unsigned long semaphore;
> > +#define I915_SCHED_HAS_SEMAPHORE     BIT(0)
> 
> unsigned int?

Everything is/will-be aligned to a pointer, and this gave us a deeper
chain :)

However, the chain is moot, so unsigned int is fine. And we can call it
flags if we aren't keeping the chain.
-Chris


More information about the Intel-gfx mailing list