drm/xe: Fix potential deadlock handling page faults
authorMatthew Brost <matthew.brost@intel.com>
Mon, 20 Mar 2023 20:58:36 +0000 (13:58 -0700)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Tue, 19 Dec 2023 23:30:21 +0000 (18:30 -0500)
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 <matthew.brost@intel.com>
Reviewed-by: Brian Welty <brian.welty@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_migrate.c

index 9102fa1d875912448f2639adb681093a6f295517..b9b2a64447d827801fd91158d948d2d8836f13ad 100644 (file)
@@ -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);