Quoting Tvrtko Ursulin (2019-05-10 14:22:36) > +static inline void > +intel_context_in(struct intel_context *ce, bool submit) > +{ > + struct intel_engine_cs *engine = ce->engine; > unsigned long flags; > + ktime_t now; > > if (READ_ONCE(engine->stats.enabled) == 0) > return; > > write_seqlock_irqsave(&engine->stats.lock, flags); > > + if (submit) { > + now = ktime_get(); > + intel_context_stats_start(&ce->stats, now); > + } else { > + now = 0; > + } > + > if (engine->stats.enabled > 0) { > - if (engine->stats.active++ == 0) > - engine->stats.start = ktime_get(); > + if (engine->stats.active++ == 0) { > + if (!now) > + now = ktime_get(); > + engine->stats.start = now; > + } > GEM_BUG_ON(engine->stats.active == 0); > } > > @@ -473,8 +503,9 @@ intel_engine_context_in(struct intel_engine_cs *engine) > } > > static inline void > -intel_engine_context_out(struct intel_engine_cs *engine) > +intel_context_out(struct intel_context *ce) > { > + struct intel_engine_cs *engine = ce->engine; ce->bound/ce->inflight at this point. > unsigned long flags; > > if (READ_ONCE(engine->stats.enabled) == 0) > @@ -483,14 +514,25 @@ intel_engine_context_out(struct intel_engine_cs *engine) > write_seqlock_irqsave(&engine->stats.lock, flags); > > if (engine->stats.enabled > 0) { > + struct execlist_port *next_port = &engine->execlists.port[1]; > + ktime_t now = ktime_get(); > ktime_t last; > > + intel_context_stats_stop(&ce->stats, now); > + > + if (port_isset(next_port)) { > + struct i915_request *next_rq = port_request(next_port); > + > + intel_context_stats_start(&next_rq->hw_context->stats, > + now); Oh crikey. Yeah, I am thinking we need to bite bullet and add the explicit tracking to ELSP promotion. As luck would happen... -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx