From dac7c587e9e8a64e1ebc038cb503d54472b5ac1a Mon Sep 17 00:00:00 2001 From: Peter Daifuku Date: Thu, 3 Sep 2020 15:01:57 -0700 Subject: [PATCH] nvgpu: don't unmap unallocated global ctx buffers In nvgpu_gr_ctx_unmap_global_ctx_buffers(), don't unmap buffers that were never allocated. Issue warning in nvgpu_gmmu_do_update_page_table() if unmapping and virt_addr is 0. Bug 200648688 Bug 3093183 Change-Id: Ia2cb5f40bbb6c35575705571eb8c900f4495d58e Signed-off-by: Peter Daifuku Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2408315 Reviewed-by: automaticguardword Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: svc-mobile-coverity Reviewed-by: svc-mobile-misra Reviewed-by: svc-mobile-cert Reviewed-by: Deepak Nibade Reviewed-by: Alex Waterman Reviewed-by: mobile promotions Tested-by: mobile promotions GVS: Gerrit_Virtual_Submit --- drivers/gpu/nvgpu/common/gr/ctx.c | 6 ++++-- drivers/gpu/nvgpu/common/mm/gmmu/page_table.c | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/nvgpu/common/gr/ctx.c b/drivers/gpu/nvgpu/common/gr/ctx.c index 2e875b06c..c71c23c54 100644 --- a/drivers/gpu/nvgpu/common/gr/ctx.c +++ b/drivers/gpu/nvgpu/common/gr/ctx.c @@ -182,8 +182,10 @@ static void nvgpu_gr_ctx_unmap_global_ctx_buffers(struct gk20a *g, nvgpu_log_fn(g, " "); for (i = 0U; i < NVGPU_GR_CTX_VA_COUNT; i++) { - nvgpu_gr_global_ctx_buffer_unmap(global_ctx_buffer, - g_bfr_index[i], vm, g_bfr_va[i]); + if (g_bfr_va[i] != 0ULL) { + nvgpu_gr_global_ctx_buffer_unmap(global_ctx_buffer, + g_bfr_index[i], vm, g_bfr_va[i]); + } } (void) memset(g_bfr_va, 0, sizeof(gr_ctx->global_ctx_buffer_va)); diff --git a/drivers/gpu/nvgpu/common/mm/gmmu/page_table.c b/drivers/gpu/nvgpu/common/mm/gmmu/page_table.c index 58288590b..583c27694 100644 --- a/drivers/gpu/nvgpu/common/mm/gmmu/page_table.c +++ b/drivers/gpu/nvgpu/common/mm/gmmu/page_table.c @@ -726,6 +726,8 @@ static int nvgpu_gmmu_do_update_page_table(struct vm_gk20a *vm, * This is considered an unmap. Just pass in 0 as the physical * address for the entire GPU range. */ + nvgpu_assert(virt_addr != 0ULL); + err = nvgpu_set_pd_level(vm, &vm->pdb, 0U, 0,