From: Tvrtko Ursulin <tvrtko.ursu...@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.ursu...@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

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to