summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorMatthew Brost <matthew.brost@intel.com>2023-07-21 22:16:13 +0300
committerRodrigo Vivi <rodrigo.vivi@intel.com>2023-12-21 19:37:53 +0300
commit7ead33156483f5e7a699002f2480757aaa34ab08 (patch)
tree1ce51c61a3ab62316724f74f69137fdc43fb4c21 /drivers/gpu
parenta4cc60a55fd9a6bb8b50375d404f317ac2030941 (diff)
downloadlinux-7ead33156483f5e7a699002f2480757aaa34ab08.tar.xz
drm/xe: Use migrate engine for page fault binds
We must use migrate engine for page fault binds in order to avoid a deadlock as the migrate engine has a reserved BCS instance which cannot be stuck on a fault. To use the migrate engine the engine argument to xe_migrate_update_pgtables must be NULL, this was incorrectly wired up so vm->eng[tile_id] was always being used. Fix this. Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Signed-off-by: Matthew Brost <matthew.brost@intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/xe/xe_pt.c3
-rw-r--r--drivers/gpu/drm/xe/xe_vm.c3
2 files changed, 3 insertions, 3 deletions
diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
index b67144768af0..d2df51910010 100644
--- a/drivers/gpu/drm/xe/xe_pt.c
+++ b/drivers/gpu/drm/xe/xe_pt.c
@@ -1421,8 +1421,7 @@ __xe_pt_bind_vma(struct xe_tile *tile, struct xe_vma *vma, struct xe_engine *e,
}
fence = xe_migrate_update_pgtables(tile->migrate,
- vm, xe_vma_bo(vma),
- e ? e : vm->eng[tile->id],
+ vm, xe_vma_bo(vma), e,
entries, num_entries,
syncs, num_syncs,
&bind_pt_update.base);
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index a07dc4f846b1..f3f6f01046a9 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -1675,7 +1675,8 @@ xe_vm_bind_vma(struct xe_vma *vma, struct xe_engine *e,
if (!(vma->tile_mask & BIT(id)))
goto next;
- fence = __xe_pt_bind_vma(tile, vma, e, first_op ? syncs : NULL,
+ fence = __xe_pt_bind_vma(tile, vma, e ? e : vm->eng[id],
+ first_op ? syncs : NULL,
first_op ? num_syncs : 0,
vma->tile_present & BIT(id));
if (IS_ERR(fence)) {