mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
drm/xe/guc: Keep scheduler timeline name alive
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: 6bd90e700b ("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>
This commit is contained in:
parent
6384271ac1
commit
299bc6d50b
|
|
@ -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;
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user