From b4eecedc75c1b75eee359c806fc964f70e0fc983 Mon Sep 17 00:00:00 2001 From: Matthew Brost Date: Mon, 20 Mar 2023 13:58:36 -0700 Subject: [PATCH] drm/xe: Fix potential deadlock handling page faults Within a class the GuC will hault scheduling if the head of the queue can't be scheduled the queue will block. This can lead to deadlock if BCS0-7 all have faults and another engine on BCS0-7 is at head of the GuC scheduling queue as the migration engine used to fix tthe fault will be blocked. To work around this set the migration engine to the highest priority when servicing page faults. v2 (Maarten): Set priority to kernel once at creation Signed-off-by: Matthew Brost Reviewed-by: Brian Welty Signed-off-by: Rodrigo Vivi --- drivers/gpu/drm/xe/xe_migrate.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c index 9102fa1d8759..b9b2a64447d8 100644 --- a/drivers/gpu/drm/xe/xe_migrate.c +++ b/drivers/gpu/drm/xe/xe_migrate.c @@ -360,6 +360,8 @@ struct xe_migrate *xe_migrate_init(struct xe_gt *gt) xe_vm_close_and_put(vm); return ERR_CAST(m->eng); } + if (xe->info.supports_usm) + m->eng->priority = XE_ENGINE_PRIORITY_KERNEL; mutex_init(&m->job_mutex);