[RFC,10/12] drm/i915: Carry over past software tracked context runtime
diff mbox series

Message ID 20200309183129.2296-11-tvrtko.ursulin@linux.intel.com
State New
Headers show
Series
  • Per client engine busyness
Related show

Commit Message

Tvrtko Ursulin March 9, 2020, 6:31 p.m. UTC
From: Tvrtko Ursulin <tvrtko.ursulin@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@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(-)

Patch
diff mbox series

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 *