From: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> Accumulate software tracked runtime from abandoned engines and destroyed contexts (same as we previously did for pphwsp runtimes). Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> --- drivers/gpu/drm/i915/gem/i915_gem_context.c | 11 ++++++++++- drivers/gpu/drm/i915/gem/i915_gem_context_types.h | 5 +++++ drivers/gpu/drm/i915/i915_drm_client.h | 5 +++++ 3 files changed, 20 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 d3887712f8c3..abf8c777041d 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_context.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c @@ -267,6 +267,10 @@ static void free_engines_rcu(struct rcu_head *rcu) GEM_BUG_ON(class >= ARRAY_SIZE(ctx->past_runtime)); atomic64_add(ce->runtime.total, &ctx->past_runtime[class]); + + GEM_BUG_ON(class >= ARRAY_SIZE(ctx->past_sw_runtime)); + atomic64_add(ktime_to_ns(intel_context_get_busy_time(ce)), + &ctx->past_sw_runtime[class]); } i915_gem_context_put(ctx); @@ -326,9 +330,14 @@ static void i915_gem_context_free(struct i915_gem_context *ctx) /* Transfer accumulated runtime to the parent drm client. */ BUILD_BUG_ON(ARRAY_SIZE(client->past_runtime) != ARRAY_SIZE(ctx->past_runtime)); - for (i = 0; i < ARRAY_SIZE(client->past_runtime); i++) + BUILD_BUG_ON(ARRAY_SIZE(client->past_sw_runtime) != + ARRAY_SIZE(ctx->past_sw_runtime)); + for (i = 0; i < ARRAY_SIZE(client->past_runtime); i++) { atomic64_add(atomic64_read(&ctx->past_runtime[i]), &client->past_runtime[i]); + atomic64_add(atomic64_read(&ctx->past_sw_runtime[i]), + &client->past_sw_runtime[i]); + } i915_drm_client_put(client); } diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context_types.h b/drivers/gpu/drm/i915/gem/i915_gem_context_types.h index 255fcc469d9b..fac11b208ea9 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_context_types.h +++ b/drivers/gpu/drm/i915/gem/i915_gem_context_types.h @@ -185,6 +185,11 @@ struct i915_gem_context { * @past_runtime: Accumulation of freed intel_context pphwsp runtimes. */ atomic64_t past_runtime[MAX_ENGINE_CLASS + 1]; + + /** + * @past_sw_runtime: Accumulation of freed intel_context runtimes. + */ + atomic64_t past_sw_runtime[MAX_ENGINE_CLASS + 1]; }; #endif /* __I915_GEM_CONTEXT_TYPES_H__ */ diff --git a/drivers/gpu/drm/i915/i915_drm_client.h b/drivers/gpu/drm/i915/i915_drm_client.h index da83259170e7..aa1e446d0376 100644 --- a/drivers/gpu/drm/i915/i915_drm_client.h +++ b/drivers/gpu/drm/i915/i915_drm_client.h @@ -66,6 +66,11 @@ struct i915_drm_client { * @past_runtime: Accumulation of pphwsp runtimes from closed contexts. */ atomic64_t past_runtime[MAX_ENGINE_CLASS + 1]; + + /** + * @past_sw_runtime: Accumulation of runtimes from closed contexts. + */ + atomic64_t past_sw_runtime[MAX_ENGINE_CLASS + 1]; }; static inline struct i915_drm_client * -- 2.20.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx