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@xxxxxxxxxxxxxxxxxx> > > --- > > 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 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx