Skip to content

Commit

Permalink
drm/xe: Fix unbind of unaccessed VMA (fault mode)
Browse files Browse the repository at this point in the history
In fault mode, page table binding is deferred until fault handler.
Thus vma->tile_present will be unset unless the VMA is accessed by GPU.

During a later unbind, the logic doesn't account for the fact that local
fence variable will be NULL in this case, leading to pass NULL into
dma_fence_add_callback() and causing few WARN_ONs to print to console.
The fix is already present in the code, just hoist the fence variable
computation to be done earlier.

Resolves warnings seen with igt@xe_exec_fault_mode@once-invalid-fault

Signed-off-by: Brian Welty <brian.welty@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
  • Loading branch information
Brian Welty authored and Rodrigo Vivi committed Dec 21, 2023
1 parent 6ffef7b commit 04dfef5
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions drivers/gpu/drm/xe/xe_vm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1740,14 +1740,14 @@ xe_vm_unbind_vma(struct xe_vma *vma, struct xe_exec_queue *q,
}
}

fence = cf ? &cf->base : !fence ?
xe_exec_queue_last_fence_get(wait_exec_queue, vm) : fence;
if (last_op) {
for (i = 0; i < num_syncs; i++)
xe_sync_entry_signal(&syncs[i], NULL,
cf ? &cf->base : fence);
xe_sync_entry_signal(&syncs[i], NULL, fence);
}

return cf ? &cf->base : !fence ?
xe_exec_queue_last_fence_get(wait_exec_queue, vm) : fence;
return fence;

err_fences:
if (fences) {
Expand Down

0 comments on commit 04dfef5

Please sign in to comment.