summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLucas Stach <l.stach@pengutronix.de>2023-02-01 16:26:07 +0100
committerLucas Stach <l.stach@pengutronix.de>2023-02-02 18:44:39 +0100
commit248cd9b265fca62fa8bdb810e9199fc09b5c2f30 (patch)
treeefc43643750da7740f18be1efd6a1bd18d424448
parent6b05266a0d6b6c02faa0a2749456dfc85277bae6 (diff)
downloadlinux-248cd9b265fca62fa8bdb810e9199fc09b5c2f30.tar.gz
linux-248cd9b265fca62fa8bdb810e9199fc09b5c2f30.tar.xz
drm/scheduler: track GPU active time per entity
Track the accumulated time that jobs from this entity were active on the GPU. This allows drivers using the scheduler to trivially implement the DRM fdinfo when the hardware doesn't provide more specific information than signalling job completion anyways. Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Reviewed-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
-rw-r--r--drivers/gpu/drm/scheduler/sched_main.c6
-rw-r--r--include/drm/gpu_scheduler.h7
2 files changed, 13 insertions, 0 deletions
diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
index 31f3a1267be4..cc5e77a30a66 100644
--- a/drivers/gpu/drm/scheduler/sched_main.c
+++ b/drivers/gpu/drm/scheduler/sched_main.c
@@ -895,6 +895,12 @@ drm_sched_get_cleanup_job(struct drm_gpu_scheduler *sched)
spin_unlock(&sched->job_list_lock);
+ if (job) {
+ job->entity->elapsed_ns += ktime_to_ns(
+ ktime_sub(job->s_fence->finished.timestamp,
+ job->s_fence->scheduled.timestamp));
+ }
+
return job;
}
diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h
index ca857ec9e7eb..f88a3fc14fb1 100644
--- a/include/drm/gpu_scheduler.h
+++ b/include/drm/gpu_scheduler.h
@@ -228,6 +228,13 @@ struct drm_sched_entity {
*/
struct rb_node rb_tree_node;
+ /**
+ * @elapsed_ns
+ *
+ * Records the amount of time where jobs from this entity were active
+ * on the GPU.
+ */
+ uint64_t elapsed_ns;
};
/**