]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/xe: Release guc ids before cancelling work
authorTejas Upadhyay <tejas.upadhyay@intel.com>
Thu, 6 Mar 2025 13:12:11 +0000 (18:42 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 22 Mar 2025 19:54:26 +0000 (12:54 -0700)
[ Upstream commit 10c7988418d8f759ba70c4a558961e0bfa74647f ]

A GT resets can be occurring in parallel while cancelling
work in async call  which can requeue these workers.
to avoid that, lets first release guc ids and then cancel
work so they don't requeued.

Fixes: 8ae8a2e8dd21 ("drm/xe: Long running job update")
Fixes: 12c2f962fe71 ("drm/xe: cancel pending job timer before freeing scheduler")
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
Suggested-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250306131211.975503-1-tejas.upadhyay@intel.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
(cherry picked from commit 8e8d76f62329127b31c64a034b052fb9e30e92af)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/xe/xe_guc_submit.c

index 3fd2b28b91ab926c29b7734ef67157a338e561af..20d05efdd406e6ec8a3f8fd2d490940a3ac2fc7e 100644 (file)
@@ -1213,11 +1213,11 @@ static void __guc_exec_queue_fini_async(struct work_struct *w)
        xe_pm_runtime_get(guc_to_xe(guc));
        trace_xe_exec_queue_destroy(q);
 
+       release_guc_id(guc, q);
        if (xe_exec_queue_is_lr(q))
                cancel_work_sync(&ge->lr_tdr);
        /* Confirm no work left behind accessing device structures */
        cancel_delayed_work_sync(&ge->sched.base.work_tdr);
-       release_guc_id(guc, q);
        xe_sched_entity_fini(&ge->entity);
        xe_sched_fini(&ge->sched);