diff --git a/drivers/gpu/nvgpu/common/mm/gmmu/page_table.c b/drivers/gpu/nvgpu/common/mm/gmmu/page_table.c index 33eb1a02f..e6b3683a0 100644 --- a/drivers/gpu/nvgpu/common/mm/gmmu/page_table.c +++ b/drivers/gpu/nvgpu/common/mm/gmmu/page_table.c @@ -37,6 +37,7 @@ #include #include #include +#include #ifdef CONFIG_NVGPU_TRACE #define nvgpu_gmmu_dbg(g, attrs, fmt, args...) \ @@ -856,7 +857,8 @@ static int nvgpu_gmmu_cache_maint_map(struct gk20a *g, struct vm_gk20a *vm, int err = 0; if (batch == NULL) { - err = g->ops.fb.tlb_invalidate(g, vm->pdb.mem); + err = nvgpu_pg_elpg_ms_protected_call(g, + g->ops.fb.tlb_invalidate(g, vm->pdb.mem)); if (err != 0) { nvgpu_err(g, "fb.tlb_invalidate() failed err=%d", err); } @@ -877,7 +879,8 @@ static int nvgpu_gmmu_cache_maint_unmap(struct gk20a *g, struct vm_gk20a *vm, g->ops.mm.cache.l2_flush(g, true))) != 0) { nvgpu_err(g, "gk20a_mm_l2_flush[1] failed"); } - err = g->ops.fb.tlb_invalidate(g, vm->pdb.mem); + err = nvgpu_pg_elpg_ms_protected_call(g, + g->ops.fb.tlb_invalidate(g, vm->pdb.mem)); if (err != 0) { nvgpu_err(g, "fb.tlb_invalidate() failed err=%d", err); } diff --git a/drivers/gpu/nvgpu/common/mm/vm.c b/drivers/gpu/nvgpu/common/mm/vm.c index e37992edf..0b6b03011 100644 --- a/drivers/gpu/nvgpu/common/mm/vm.c +++ b/drivers/gpu/nvgpu/common/mm/vm.c @@ -39,6 +39,7 @@ #include #include #include +#include #include struct nvgpu_ctag_buffer_info { @@ -297,7 +298,7 @@ NVGPU_COV_WHITELIST_BLOCK_END(NVGPU_MISRA(Rule, 15_6)) if (mapping_batch->need_tlb_invalidate) { struct gk20a *g = gk20a_from_vm(vm); - err = g->ops.fb.tlb_invalidate(g, vm->pdb.mem); + err = nvgpu_pg_elpg_ms_protected_call(g, g->ops.fb.tlb_invalidate(g, vm->pdb.mem)); if (err != 0) { nvgpu_err(g, "fb.tlb_invalidate() failed err=%d", err); } diff --git a/drivers/gpu/nvgpu/hal/mm/mmu_fault/mmu_fault_gv11b_fusa.c b/drivers/gpu/nvgpu/hal/mm/mmu_fault/mmu_fault_gv11b_fusa.c index abb5ae972..1faa23af0 100644 --- a/drivers/gpu/nvgpu/hal/mm/mmu_fault/mmu_fault_gv11b_fusa.c +++ b/drivers/gpu/nvgpu/hal/mm/mmu_fault/mmu_fault_gv11b_fusa.c @@ -41,6 +41,7 @@ #include #include #include +#include #include @@ -862,7 +863,12 @@ static int gv11b_fb_fix_page_fault(struct gk20a *g, return err; } /* invalidate tlb so that GMMU does not use old cached translation */ - g->ops.fb.tlb_invalidate(g, mmufault->refch->vm->pdb.mem); + err = nvgpu_pg_elpg_ms_protected_call(g, + g->ops.fb.tlb_invalidate(g, mmufault->refch->vm->pdb.mem)); + if (err != 0) { + nvgpu_err(g, "tlb invalidate failed"); + return err; + } err = nvgpu_get_pte(g, mmufault->refch->vm, mmufault->fault_addr, &pte[0]);