]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe: Only use reserved BCS instances for usm migrate exec queue
authorMatthew Brost <matthew.brost@intel.com>
Mon, 15 Apr 2024 19:04:53 +0000 (12:04 -0700)
committerMatthew Brost <matthew.brost@intel.com>
Tue, 14 May 2024 20:12:27 +0000 (13:12 -0700)
The GuC context scheduling queue is 2 entires deep, thus it is possible
for a migration job to be stuck behind a fault if migration exec queue
shares engines with user jobs. This can deadlock as the migrate exec
queue is required to service page faults. Avoid deadlock by only using
reserved BCS instances for usm migrate exec queue.

Fixes: a043fbab7af5 ("drm/xe/pvc: Use fast copy engines as migrate engine on PVC")
Cc: Matt Roper <matthew.d.roper@intel.com>
Cc: Niranjana Vishwanathapura <niranjana.vishwanathapura@intel.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240415190453.696553-2-matthew.brost@intel.com
Reviewed-by: Brian Welty <brian.welty@intel.com>
drivers/gpu/drm/xe/xe_migrate.c

index 2b12f3621f9e255f0b6bca08a1b6ee0c0f70683f..bacb23de411b06c09824397a94303c8d3cdb60fd 100644 (file)
@@ -34,7 +34,6 @@
 #include "xe_sync.h"
 #include "xe_trace.h"
 #include "xe_vm.h"
-#include "xe_wa.h"
 
 /**
  * struct xe_migrate - migrate context.
@@ -300,10 +299,6 @@ static int xe_migrate_prepare_vm(struct xe_tile *tile, struct xe_migrate *m,
 }
 
 /*
- * Due to workaround 16017236439, odd instance hardware copy engines are
- * faster than even instance ones.
- * This function returns the mask involving all fast copy engines and the
- * reserved copy engine to be used as logical mask for migrate engine.
  * Including the reserved copy engine is required to avoid deadlocks due to
  * migrate jobs servicing the faults gets stuck behind the job that faulted.
  */
@@ -317,8 +312,7 @@ static u32 xe_migrate_usm_logical_mask(struct xe_gt *gt)
                if (hwe->class != XE_ENGINE_CLASS_COPY)
                        continue;
 
-               if (!XE_WA(gt, 16017236439) ||
-                   xe_gt_is_usm_hwe(gt, hwe) || hwe->instance & 1)
+               if (xe_gt_is_usm_hwe(gt, hwe))
                        logical_mask |= BIT(hwe->logical_instance);
        }
 
@@ -369,6 +363,10 @@ struct xe_migrate *xe_migrate_init(struct xe_tile *tile)
                if (!hwe || !logical_mask)
                        return ERR_PTR(-EINVAL);
 
+               /*
+                * XXX: Currently only reserving 1 (likely slow) BCS instance on
+                * PVC, may want to revisit if performance is needed.
+                */
                m->q = xe_exec_queue_create(xe, vm, logical_mask, 1, hwe,
                                            EXEC_QUEUE_FLAG_KERNEL |
                                            EXEC_QUEUE_FLAG_PERMANENT |