Add a counter to xe_drm_client that tracks the number of times the
engine has been reset since the drm client was created.

Signed-off-by: Jonathan Cavitt <jonathan.cav...@intel.com>
---
 drivers/gpu/drm/xe/xe_drm_client.c | 2 ++
 drivers/gpu/drm/xe/xe_drm_client.h | 2 ++
 drivers/gpu/drm/xe/xe_guc_submit.c | 4 +++-
 3 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/xe/xe_drm_client.c 
b/drivers/gpu/drm/xe/xe_drm_client.c
index f15560d0b6ff..ecd2ce99fd19 100644
--- a/drivers/gpu/drm/xe/xe_drm_client.c
+++ b/drivers/gpu/drm/xe/xe_drm_client.c
@@ -492,6 +492,8 @@ static void show_blames(struct drm_printer *p, struct 
drm_file *file)
 
        client = xef->client;
 
+       drm_printf(p, "drm-client-reset-count:%u\n",
+                  atomic_read(&client->reset_count));
        drm_printf(p, "\n");
        drm_printf(p, "- Exec queue ban list -\n");
        spin_lock(&client->blame_lock);
diff --git a/drivers/gpu/drm/xe/xe_drm_client.h 
b/drivers/gpu/drm/xe/xe_drm_client.h
index d21fd0b90742..c35de675ccfa 100644
--- a/drivers/gpu/drm/xe/xe_drm_client.h
+++ b/drivers/gpu/drm/xe/xe_drm_client.h
@@ -53,6 +53,8 @@ struct xe_drm_client {
         * Protected by @blame_lock;
         */
        struct list_head blame_list;
+       /** @reset_count: number of times this drm client has seen an engine 
reset */
+       atomic_t reset_count;
 #endif
 };
 
diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c 
b/drivers/gpu/drm/xe/xe_guc_submit.c
index d9da5c89429e..8810abc8f04a 100644
--- a/drivers/gpu/drm/xe/xe_guc_submit.c
+++ b/drivers/gpu/drm/xe/xe_guc_submit.c
@@ -1988,7 +1988,9 @@ int xe_guc_exec_queue_reset_handler(struct xe_guc *guc, 
u32 *msg, u32 len)
                return -EPROTO;
 
        hwe = q->hwe;
-
+#ifdef CONFIG_PROC_FS
+       atomic_inc(&q->xef->client->reset_count);
+#endif
        xe_gt_info(gt, "Engine reset: engine_class=%s, logical_mask: 0x%x, 
guc_id=%d",
                   xe_hw_engine_class_to_str(q->class), q->logical_mask, 
guc_id);
 
-- 
2.43.0

Reply via email to