From: Brian Welty Date: Thu, 2 Nov 2023 23:04:53 +0000 (-0700) Subject: drm/xe: Fix unbind of unaccessed VMA (fault mode) X-Git-Tag: v6.8-rc1~21^2~13^2~222 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=04dfef5b41afc85e8de7b0397050cdb51db35eda;p=linux-2.6-block.git drm/xe: Fix unbind of unaccessed VMA (fault mode) 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 Reviewed-by: Matthew Brost Signed-off-by: Rodrigo Vivi --- diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c index 7aefa6aa66a1..b4a4ed28019c 100644 --- a/drivers/gpu/drm/xe/xe_vm.c +++ b/drivers/gpu/drm/xe/xe_vm.c @@ -1740,14 +1740,14 @@ next: } } + 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) {