[Intel-gfx] [RFC 10/12] drm/i915: Carry over past software tracked context runtime
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Mon Mar 9 18:31:27 UTC 2020
From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
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 at intel.com>
---
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
More information about the Intel-gfx
mailing list