[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