[Intel-gfx] [PATCH 1/9] drm/i915: Remove HW semaphores for gen7 inter-engine synchronisation

Chris Wilson chris at chris-wilson.co.uk
Fri Dec 28 11:47:42 UTC 2018


Quoting Mika Kuoppala (2018-12-28 11:37:32)
> Chris Wilson <chris at chris-wilson.co.uk> writes:
> 
> > The writing is on the wall for the existence of a single execution queue
> > along each engine, and as a consequence we will not be able to track
> > dependencies along the HW queue itself, i.e. we will not be able to use
> > HW semaphores on gen7 as they use a global set of registers (and unlike
> > gen8+ we can not effectively target memory to keep per-context seqno and
> > dependencies).
> >
> > On the positive side, when we implement request reordering for gen7 we
> > could also not presume a simple execution queue and would also require
> > removing the current semaphore generation code. So this bring us another
> > step closer to request reordering!
> >
> > The negative side is that using interrupts to drive inter-engine
> > synchronisation is much slower (4us -> 15us to do a nop on each of the 3
> > engines on ivb). This is much better than it at the time of introducing
> > the HW semaphores and equally importantly userspace weaned itself of
> 
> s/of/off ?
> 
> > intermixing dependent BLT/RENDER operations (the prime culprit was glyph
> > rendering in UXA). So while we regress the microbenchmarks it should not
> > impact the user.
> >
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > ---
> >  drivers/gpu/drm/i915/i915_debugfs.c     |  19 +--
> >  drivers/gpu/drm/i915/i915_drv.c         |   2 +-
> >  drivers/gpu/drm/i915/i915_drv.h         |   3 -
> >  drivers/gpu/drm/i915/i915_gem.c         |   4 +-
> >  drivers/gpu/drm/i915/i915_request.c     | 126 +---------------
> >  drivers/gpu/drm/i915/i915_timeline.h    |   8 -
> >  drivers/gpu/drm/i915/intel_engine_cs.c  |  29 +---
> >  drivers/gpu/drm/i915/intel_hangcheck.c  | 155 --------------------
> >  drivers/gpu/drm/i915/intel_ringbuffer.c | 187 +-----------------------
> >  drivers/gpu/drm/i915/intel_ringbuffer.h |  56 +------
> >  10 files changed, 15 insertions(+), 574 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> > index 77486a614614..b0bdf3c0d776 100644
> > --- a/drivers/gpu/drm/i915/i915_debugfs.c
> > +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> > @@ -1041,21 +1041,7 @@ static const struct file_operations i915_error_state_fops = {
> >  static int
> >  i915_next_seqno_set(void *data, u64 val)
> >  {
> > -     struct drm_i915_private *dev_priv = data;
> > -     struct drm_device *dev = &dev_priv->drm;
> > -     int ret;
> > -
> > -     ret = mutex_lock_interruptible(&dev->struct_mutex);
> > -     if (ret)
> > -             return ret;
> > -
> > -     intel_runtime_pm_get(dev_priv);
> > -     ret = i915_gem_set_global_seqno(dev, val);
> > -     intel_runtime_pm_put(dev_priv);
> > -
> > -     mutex_unlock(&dev->struct_mutex);
> > -
> > -     return ret;
> > +     return val ? 0 : -EINVAL;
> 
> This begs to meet it's maker soon.

Yeah, I was tempted to just remove the debugfs, but was feeling lazy
enough to leave reviewing igt to a second patch.

The only user I see is gem_exec_whisper who is ignoring errors here. So
looks safe. Safer still to do it afterwards.

> I didn't find anything else in this patch, so looks
> ok and what a clump of compilated code we can get rid off!
> Code that we have dragged along with no small amount of
> suffering. I am in favour.

I predict short-lived relief. The light at the end of this tunnel goes
choo-choo. :|
-Chris


More information about the Intel-gfx mailing list