@@ -1577,6 +1577,16 @@ void xe_vm_close_and_put(struct xe_vm *vm)
1577
1577
xe -> usm .num_vm_in_fault_mode -- ;
1578
1578
else if (!(vm -> flags & XE_VM_FLAG_MIGRATION ))
1579
1579
xe -> usm .num_vm_in_non_fault_mode -- ;
1580
+
1581
+ if (vm -> usm .asid ) {
1582
+ void * lookup ;
1583
+
1584
+ xe_assert (xe , xe -> info .has_asid );
1585
+ xe_assert (xe , !(vm -> flags & XE_VM_FLAG_MIGRATION ));
1586
+
1587
+ lookup = xa_erase (& xe -> usm .asid_to_vm , vm -> usm .asid );
1588
+ xe_assert (xe , lookup == vm );
1589
+ }
1580
1590
mutex_unlock (& xe -> usm .lock );
1581
1591
1582
1592
for_each_tile (tile , xe , id )
@@ -1592,24 +1602,15 @@ static void vm_destroy_work_func(struct work_struct *w)
1592
1602
struct xe_device * xe = vm -> xe ;
1593
1603
struct xe_tile * tile ;
1594
1604
u8 id ;
1595
- void * lookup ;
1596
1605
1597
1606
/* xe_vm_close_and_put was not called? */
1598
1607
xe_assert (xe , !vm -> size );
1599
1608
1600
1609
mutex_destroy (& vm -> snap_mutex );
1601
1610
1602
- if (!(vm -> flags & XE_VM_FLAG_MIGRATION )) {
1611
+ if (!(vm -> flags & XE_VM_FLAG_MIGRATION ))
1603
1612
xe_device_mem_access_put (xe );
1604
1613
1605
- if (xe -> info .has_asid && vm -> usm .asid ) {
1606
- mutex_lock (& xe -> usm .lock );
1607
- lookup = xa_erase (& xe -> usm .asid_to_vm , vm -> usm .asid );
1608
- xe_assert (xe , lookup == vm );
1609
- mutex_unlock (& xe -> usm .lock );
1610
- }
1611
- }
1612
-
1613
1614
for_each_tile (tile , xe , id )
1614
1615
XE_WARN_ON (vm -> pt_root [id ]);
1615
1616
0 commit comments