Quoting Tvrtko Ursulin (2020-03-18 12:11:34) > From: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> > > As contexts are abandoned we want to remember how much GPU time they used > (per class) so later we can used it for smarter purposes. > > Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> > --- > drivers/gpu/drm/i915/gem/i915_gem_context.c | 13 ++++++++++++- > drivers/gpu/drm/i915/gem/i915_gem_context_types.h | 5 +++++ > 2 files changed, 17 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.c b/drivers/gpu/drm/i915/gem/i915_gem_context.c > index 7c119a3a2cbd..5edf79ed6247 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_context.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c > @@ -257,7 +257,19 @@ static void free_engines_rcu(struct rcu_head *rcu) > { > struct i915_gem_engines *engines = > container_of(rcu, struct i915_gem_engines, rcu); > + struct i915_gem_context *ctx = engines->ctx; > + struct i915_gem_engines_iter it; > + struct intel_context *ce; > + > + /* Transfer accumulated runtime to the parent GEM context. */ > + for_each_gem_engine(ce, engines, it) { > + unsigned int class = ce->engine->uabi_class; > > + GEM_BUG_ON(class >= ARRAY_SIZE(ctx->past_runtime)); > + atomic64_add(ce->runtime.total, &ctx->past_runtime[class]); Hmm, there's an odd situation where the free_engines_rcu could fire before we do the final schedule_out of the context. GEM_BUG_ON(intel_context_inflight(ce)) to see if that's being too paranoid. -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx