drm/xe/migrate: Update cpu page-table updates
authorThomas Hellström <thomas.hellstrom@linux.intel.com>
Fri, 10 Mar 2023 16:56:55 +0000 (17:56 +0100)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Tue, 19 Dec 2023 23:30:13 +0000 (18:30 -0500)
Don't wait for GPU to be able to update page-tables using CPU. Putting
ourselves to sleep may be more of a problem than using GPU for
page-table updates. Also allow the vm to be NULL since the migrate
kunit test uses NULL for vm.

Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_migrate.c

index 4a9fe1f..3668921 100644 (file)
@@ -979,25 +979,13 @@ xe_migrate_update_pgtables_cpu(struct xe_migrate *m,
        int err;
        u32 i;
 
-       /* Wait on BO moves for 10 ms, then fall back to GPU job */
-       if (bo) {
-               long wait;
+       if (bo && !dma_resv_test_signaled(bo->ttm.base.resv,
+                                         DMA_RESV_USAGE_KERNEL))
+               return ERR_PTR(-ETIME);
 
-               wait = dma_resv_wait_timeout(bo->ttm.base.resv,
-                                            DMA_RESV_USAGE_KERNEL,
-                                            true, HZ / 100);
-               if (wait <= 0)
-                       return ERR_PTR(-ETIME);
-       }
-       if (wait_vm) {
-               long wait;
-
-               wait = dma_resv_wait_timeout(&vm->resv,
-                                            DMA_RESV_USAGE_BOOKKEEP,
-                                            true, HZ / 100);
-               if (wait <= 0)
-                       return ERR_PTR(-ETIME);
-       }
+       if (wait_vm && !dma_resv_test_signaled(&vm->resv,
+                                              DMA_RESV_USAGE_BOOKKEEP))
+               return ERR_PTR(-ETIME);
 
        if (ops->pre_commit) {
                err = ops->pre_commit(pt_update);
@@ -1011,8 +999,10 @@ xe_migrate_update_pgtables_cpu(struct xe_migrate *m,
                              update->ofs, update->qwords, update);
        }
 
-       trace_xe_vm_cpu_bind(vm);
-       xe_device_wmb(vm->xe);
+       if (vm) {
+               trace_xe_vm_cpu_bind(vm);
+               xe_device_wmb(vm->xe);
+       }
 
        fence = dma_fence_get_stub();