Skip to content

Commit

Permalink
drm/xe: Don't restart parallel queues multiple times on GT reset
Browse files Browse the repository at this point in the history
In case of parallel submissions multiple GuC id will point to the
same exec queue and on GT reset such exec queues will get restarted
multiple times which is not desirable.

v2: don't use exec_queue_enabled() which could race,
    do the same for xe_guc_submit_stop (Matt B)

Link: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/2295
Cc: Jonathan Cavitt <jonathan.cavitt@intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Tejas Upadhyay <tejas.upadhyay@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241022103555.731557-1-nirmoy.das@intel.com
Signed-off-by: Nirmoy Das <nirmoy.das@intel.com>
(cherry picked from commit c8b0acd)
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
  • Loading branch information
Nirmoy Das authored and Lucas De Marchi committed Oct 24, 2024
1 parent 9c1813b commit cdc2102
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions drivers/gpu/drm/xe/xe_guc_submit.c
Original file line number Diff line number Diff line change
Expand Up @@ -1726,8 +1726,13 @@ void xe_guc_submit_stop(struct xe_guc *guc)

mutex_lock(&guc->submission_state.lock);

xa_for_each(&guc->submission_state.exec_queue_lookup, index, q)
xa_for_each(&guc->submission_state.exec_queue_lookup, index, q) {
/* Prevent redundant attempts to stop parallel queues */
if (q->guc->id != index)
continue;

guc_exec_queue_stop(guc, q);
}

mutex_unlock(&guc->submission_state.lock);

Expand Down Expand Up @@ -1765,8 +1770,13 @@ int xe_guc_submit_start(struct xe_guc *guc)

mutex_lock(&guc->submission_state.lock);
atomic_dec(&guc->submission_state.stopped);
xa_for_each(&guc->submission_state.exec_queue_lookup, index, q)
xa_for_each(&guc->submission_state.exec_queue_lookup, index, q) {
/* Prevent redundant attempts to start parallel queues */
if (q->guc->id != index)
continue;

guc_exec_queue_start(q);
}
mutex_unlock(&guc->submission_state.lock);

wake_up_all(&guc->ct.wq);
Expand Down

0 comments on commit cdc2102

Please sign in to comment.