@@ -863,11 +863,6 @@ static void xe_vma_destroy_late(struct xe_vma *vma)
863
863
vma -> ufence = NULL ;
864
864
}
865
865
866
- if (vma -> ufence ) {
867
- xe_sync_ufence_put (vma -> ufence );
868
- vma -> ufence = NULL ;
869
- }
870
-
871
866
if (xe_vma_is_userptr (vma )) {
872
867
struct xe_userptr_vma * uvma = to_userptr_vma (vma );
873
868
struct xe_userptr * userptr = & uvma -> userptr ;
@@ -1504,6 +1499,9 @@ static void xe_vm_free(struct drm_gpuvm *gpuvm)
1504
1499
/* xe_vm_close_and_put was not called? */
1505
1500
xe_assert (xe , !vm -> size );
1506
1501
1502
+ if (xe_vm_in_preempt_fence_mode (vm ))
1503
+ flush_work (& vm -> preempt .rebind_work );
1504
+
1507
1505
mutex_destroy (& vm -> snap_mutex );
1508
1506
1509
1507
if (!(vm -> flags & XE_VM_FLAG_MIGRATION ))
@@ -2100,6 +2098,10 @@ vm_bind_ioctl_ops_create(struct xe_vm *vm, struct xe_bo *bo,
2100
2098
struct xe_vma_op * op = gpuva_op_to_vma_op (__op );
2101
2099
2102
2100
if (__op -> op == DRM_GPUVA_OP_MAP ) {
2101
+ op -> map .immediate =
2102
+ flags & DRM_XE_VM_BIND_FLAG_IMMEDIATE ;
2103
+ op -> map .read_only =
2104
+ flags & DRM_XE_VM_BIND_FLAG_READONLY ;
2103
2105
op -> map .is_null = flags & DRM_XE_VM_BIND_FLAG_NULL ;
2104
2106
op -> map .dumpable = flags & DRM_XE_VM_BIND_FLAG_DUMPABLE ;
2105
2107
op -> map .pat_index = pat_index ;
@@ -2294,6 +2296,8 @@ static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct xe_exec_queue *q,
2294
2296
switch (op -> base .op ) {
2295
2297
case DRM_GPUVA_OP_MAP :
2296
2298
{
2299
+ flags |= op -> map .read_only ?
2300
+ VMA_CREATE_FLAG_READ_ONLY : 0 ;
2297
2301
flags |= op -> map .is_null ?
2298
2302
VMA_CREATE_FLAG_IS_NULL : 0 ;
2299
2303
flags |= op -> map .dumpable ?
@@ -2438,7 +2442,7 @@ static int op_execute(struct drm_exec *exec, struct xe_vm *vm,
2438
2442
case DRM_GPUVA_OP_MAP :
2439
2443
err = xe_vm_bind (vm , vma , op -> q , xe_vma_bo (vma ),
2440
2444
op -> syncs , op -> num_syncs ,
2441
- !xe_vm_in_fault_mode (vm ),
2445
+ op -> map . immediate || !xe_vm_in_fault_mode (vm ),
2442
2446
op -> flags & XE_VMA_OP_FIRST ,
2443
2447
op -> flags & XE_VMA_OP_LAST );
2444
2448
break ;
0 commit comments