]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe/guc: Keep scheduler timeline name alive
authorArvind Yadav <arvind.yadav@intel.com>
Tue, 14 Jul 2026 06:44:02 +0000 (12:14 +0530)
committerThomas Hellström <thomas.hellstrom@linux.intel.com>
Thu, 16 Jul 2026 14:33:02 +0000 (16:33 +0200)
The scheduler keeps a pointer to the timeline name, but q->name
is freed with the exec queue while scheduler fences can still
reference it.

Store the name in struct xe_guc_exec_queue so it shares
the scheduler's RCU-deferred lifetime.

Fixes: 6bd90e700b42 ("drm/xe: Make dma-fences compliant with the safe access rules")
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Acked-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patch.msgid.link/20260714064402.2457257-1-arvind.yadav@intel.com
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
(cherry picked from commit 41075f0eb5dcbd3b065d15f15ef7bbe9315188e8)
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
drivers/gpu/drm/xe/xe_guc_exec_queue_types.h
drivers/gpu/drm/xe/xe_guc_submit.c

index e5e53b421f29fb32ef7f8ef6fd8b04ed63dce34f..cda14d954e572fde3b644a6a4d2d333a6b2884b5 100644 (file)
@@ -10,6 +10,7 @@
 #include <linux/workqueue.h>
 
 #include "xe_gpu_scheduler_types.h"
+#include "xe_hw_fence_types.h"
 
 struct dma_fence;
 struct xe_exec_queue;
@@ -24,6 +25,10 @@ struct xe_guc_exec_queue {
        struct rcu_head rcu;
        /** @sched: GPU scheduler for this xe_exec_queue */
        struct xe_gpu_scheduler sched;
+       /**
+        * @name: Scheduler timeline name, kept with @sched until RCU free.
+        */
+       char name[MAX_FENCE_NAME_LEN];
        /** @entity: Scheduler entity for this xe_exec_queue */
        struct xe_sched_entity entity;
        /**
index f5c3d8a97ec64002dab3a9fec80d034e6d0f3e2b..9109f21d367fdbd5e2494730e000c963684f75cd 100644 (file)
@@ -1955,6 +1955,8 @@ static int guc_exec_queue_init(struct xe_exec_queue *q)
 
        xe_exec_queue_assign_name(q, q->guc->id);
 
+       strscpy(ge->name, q->name, sizeof(ge->name));
+
        /*
         * Use primary queue's submit_wq for all secondary queues of a
         * multi queue group. This serialization avoids any locking around
@@ -1969,7 +1971,7 @@ static int guc_exec_queue_init(struct xe_exec_queue *q)
        err = xe_sched_init(&ge->sched, &drm_sched_ops, &xe_sched_ops,
                            submit_wq, xe_lrc_ring_size() / MAX_JOB_SIZE_BYTES, 64,
                            timeout, guc_to_gt(guc)->ordered_wq, NULL,
-                           q->name, gt_to_xe(q->gt)->drm.dev);
+                           ge->name, gt_to_xe(q->gt)->drm.dev);
        if (err)
                goto err_release_id;