@@ -337,14 +337,14 @@ impl gpuvm::DriverGpuVm for VmInner {
337337 fn step_remap (
338338 self : & mut gpuvm:: UpdatingGpuVm < ' _ , Self > ,
339339 op : & mut gpuvm:: OpReMap < Self > ,
340+ vm_bo : & gpuvm:: GpuVmBo < Self > ,
340341 ctx : & mut Self :: StepContext ,
341342 ) -> Result {
342343 let prev_gpuva = ctx. prev_va . take ( ) . expect ( "Multiple step_remap calls" ) ;
343344 let next_gpuva = ctx. next_va . take ( ) . expect ( "Multiple step_remap calls" ) ;
344345 let va = op. unmap ( ) . va ( ) . expect ( "No previous VA" ) ;
345346 let orig_addr = va. addr ( ) ;
346347 let orig_range = va. range ( ) ;
347- let vm_bo = va. vm_bo ( ) ;
348348
349349 // Only unmap the hole between prev/next, if they exist
350350 let unmap_start = if let Some ( op) = op. prev_map ( ) {
@@ -372,6 +372,18 @@ impl gpuvm::DriverGpuVm for VmInner {
372372
373373 self . unmap_pages ( unmap_start, UAT_PGSZ , ( unmap_range >> UAT_PGBIT ) as usize ) ?;
374374
375+ if let Some ( asid) = self . slot ( ) {
376+ mem:: tlbi_range ( asid as u8 , unmap_start as usize , unmap_range as usize ) ;
377+ mod_dev_dbg ! (
378+ self . dev,
379+ "MMU: flush range: asid={:#x} start={:#x} len={:#x}\n " ,
380+ asid,
381+ unmap_start,
382+ unmap_range,
383+ ) ;
384+ mem:: sync ( ) ;
385+ }
386+
375387 if op. unmap ( ) . unmap_and_unlink_va ( ) . is_none ( ) {
376388 dev_err ! ( self . dev. as_ref( ) , "step_unmap: could not unlink gpuva" ) ;
377389 }
@@ -1194,8 +1206,8 @@ impl Vm {
11941206 new_va : Some ( gpuvm:: GpuVa :: < VmInner > :: new ( init:: default ( ) ) ?) ,
11951207 prev_va : Some ( gpuvm:: GpuVa :: < VmInner > :: new ( init:: default ( ) ) ?) ,
11961208 next_va : Some ( gpuvm:: GpuVa :: < VmInner > :: new ( init:: default ( ) ) ?) ,
1197- vm_bo : None ,
11981209 prot,
1210+ ..Default :: default ( )
11991211 } ;
12001212
12011213 let sgt = gem. sg_table ( ) ?;
0 commit comments