@@ -303,6 +303,7 @@ impl gpuvm::DriverGpuVm for VmInner {
303303 self . unmap_pages ( va. addr ( ) , UAT_PGSZ , ( va. range ( ) >> UAT_PGBIT ) as usize ) ?;
304304
305305 if let Some ( asid) = self . slot ( ) {
306+ fence ( Ordering :: SeqCst ) ;
306307 mem:: tlbi_range ( asid as u8 , va. addr ( ) as usize , va. range ( ) as usize ) ;
307308 mod_dev_dbg ! (
308309 self . dev,
@@ -356,6 +357,7 @@ impl gpuvm::DriverGpuVm for VmInner {
356357 self . unmap_pages ( unmap_start, UAT_PGSZ , ( unmap_range >> UAT_PGBIT ) as usize ) ?;
357358
358359 if let Some ( asid) = self . slot ( ) {
360+ fence ( Ordering :: SeqCst ) ;
359361 mem:: tlbi_range ( asid as u8 , unmap_start as usize , unmap_range as usize ) ;
360362 mod_dev_dbg ! (
361363 self . dev,
@@ -665,6 +667,7 @@ impl KernelMapping {
665667 self . size( )
666668 ) ;
667669 }
670+ fence ( Ordering :: SeqCst ) ;
668671
669672 // If we don't have (and have never had) a VM slot, just return
670673 let slot = match owner. slot ( ) {
@@ -815,6 +818,7 @@ impl Drop for KernelMapping {
815818 }
816819
817820 if let Some ( asid) = owner. slot ( ) {
821+ fence ( Ordering :: SeqCst ) ;
818822 mem:: tlbi_range ( asid as u8 , self . iova ( ) as usize , self . size ( ) ) ;
819823 mod_dev_dbg ! (
820824 owner. dev,
0 commit comments