[Intel-gfx] [PATCH 1/2] drm/i915: Track the number of times we have woken the GPU up

Chris Wilson chris at chris-wilson.co.uk
Wed Jan 24 10:42:23 UTC 2018


Quoting Tvrtko Ursulin (2018-01-24 10:33:29)
> 
> On 19/01/2018 15:23, Chris Wilson wrote:
> > By counting the number of times we have woken up, we have a very simple
> > means of defining an epoch, which will come in handy if we want to
> > perform deferred tasks at the end of an epoch (i.e. while we are going
> > to sleep) without imposing on the next activity cycle.
> > 
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > ---
> >   drivers/gpu/drm/i915/i915_debugfs.c     | 7 ++++---
> >   drivers/gpu/drm/i915/i915_drv.h         | 5 +++++
> >   drivers/gpu/drm/i915/i915_gem_request.c | 1 +
> >   3 files changed, 10 insertions(+), 3 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> > index cc659b4b2a45..1aac3ec7d14d 100644
> > --- a/drivers/gpu/drm/i915/i915_debugfs.c
> > +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> > @@ -2717,7 +2717,8 @@ static int i915_runtime_pm_status(struct seq_file *m, void *unused)
> >       if (!HAS_RUNTIME_PM(dev_priv))
> >               seq_puts(m, "Runtime power management not supported\n");
> >   
> > -     seq_printf(m, "GPU idle: %s\n", yesno(!dev_priv->gt.awake));
> > +     seq_printf(m, "GPU idle: %s (epoch %d)\n",
> > +                yesno(!dev_priv->gt.awake), dev_priv->gt.epoch);
> >       seq_printf(m, "IRQs disabled: %s\n",
> >                  yesno(!intel_irqs_enabled(dev_priv)));
> >   #ifdef CONFIG_PM
> > @@ -3150,8 +3151,8 @@ static int i915_engine_info(struct seq_file *m, void *unused)
> >   
> >       intel_runtime_pm_get(dev_priv);
> >   
> > -     seq_printf(m, "GT awake? %s\n",
> > -                yesno(dev_priv->gt.awake));
> > +     seq_printf(m, "GT awake? %s (epoch %d)\n",
> > +                yesno(dev_priv->gt.awake), dev_priv->gt.epoch);
> >       seq_printf(m, "Global active requests: %d\n",
> >                  dev_priv->gt.active_requests);
> >       seq_printf(m, "CS timestamp frequency: %u kHz\n",
> > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > index 317953484fec..98e8385d1bb0 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.h
> > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > @@ -2302,6 +2302,11 @@ struct drm_i915_private {
> >               struct i915_gem_timeline global_timeline;
> >               u32 active_requests;
> >   
> > +             /**
> > +              * The number of times we have woken up.
> > +              */
> > +             u32 epoch;
> > +
> >               /**
> >                * Is the GPU currently considered idle, or busy executing
> >                * userspace requests? Whilst idle, we allow runtime power
> > diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c
> > index a0f451b4a4e8..f0fab070a3a0 100644
> > --- a/drivers/gpu/drm/i915/i915_gem_request.c
> > +++ b/drivers/gpu/drm/i915/i915_gem_request.c
> > @@ -274,6 +274,7 @@ static void mark_busy(struct drm_i915_private *i915)
> >       intel_display_power_get(i915, POWER_DOMAIN_GT_IRQ);
> >   
> >       i915->gt.awake = true;
> > +     i915->gt.epoch++;
> >   
> >       intel_enable_gt_powersave(i915);
> >       i915_update_gfx_val(i915);
> > 
> 
> I'd be tempted to use a standard type like unsigned int where explicit 
> width is not needed but it's minor.

Yeah, I was just copying the neighbouring type. active_requests is bound
to u32 by inflight_seqnos (which is bound by the hw seqno being u32).

Still no reason to impose u32 here, it raises the question of why must
it be exactly 32b.
-Chris


More information about the Intel-gfx mailing list