@@ -341,14 +341,14 @@ impl gpuvm::DriverGpuVm for VmInner {
341341 fn step_remap (
342342 self : & mut gpuvm:: UpdatingGpuVm < ' _ , Self > ,
343343 op : & mut gpuvm:: OpReMap < Self > ,
344+ vm_bo : & gpuvm:: GpuVmBo < Self > ,
344345 ctx : & mut Self :: StepContext ,
345346 ) -> Result {
346347 let prev_gpuva = ctx. prev_va . take ( ) . expect ( "Multiple step_remap calls" ) ;
347348 let next_gpuva = ctx. next_va . take ( ) . expect ( "Multiple step_remap calls" ) ;
348349 let va = op. unmap ( ) . va ( ) . expect ( "No previous VA" ) ;
349350 let orig_addr = va. addr ( ) ;
350351 let orig_range = va. range ( ) ;
351- let vm_bo = va. vm_bo ( ) ;
352352
353353 // Only unmap the hole between prev/next, if they exist
354354 let unmap_start = if let Some ( op) = op. prev_map ( ) {
@@ -376,6 +376,18 @@ impl gpuvm::DriverGpuVm for VmInner {
376376
377377 self . unmap_pages ( unmap_start, UAT_PGSZ , ( unmap_range >> UAT_PGBIT ) as usize ) ?;
378378
379+ if let Some ( asid) = self . slot ( ) {
380+ mem:: tlbi_range ( asid as u8 , unmap_start as usize , unmap_range as usize ) ;
381+ mod_dev_dbg ! (
382+ self . dev,
383+ "MMU: flush range: asid={:#x} start={:#x} len={:#x}\n " ,
384+ asid,
385+ unmap_start,
386+ unmap_range,
387+ ) ;
388+ mem:: sync ( ) ;
389+ }
390+
379391 if op. unmap ( ) . unmap_and_unlink_va ( ) . is_none ( ) {
380392 dev_err ! ( self . dev. as_ref( ) , "step_unmap: could not unlink gpuva" ) ;
381393 }
@@ -1192,8 +1204,8 @@ impl Vm {
11921204 new_va : Some ( gpuvm:: GpuVa :: < VmInner > :: new ( pin_init:: default ( ) ) ?) ,
11931205 prev_va : Some ( gpuvm:: GpuVa :: < VmInner > :: new ( pin_init:: default ( ) ) ?) ,
11941206 next_va : Some ( gpuvm:: GpuVa :: < VmInner > :: new ( pin_init:: default ( ) ) ?) ,
1195- vm_bo : None ,
11961207 prot,
1208+ ..Default :: default ( )
11971209 } ;
11981210
11991211 let sgt = gem. owned_sg_table ( ) ?;
0 commit comments