From 0a0ffca1459d43dfdba3f5a39a7aa0c193ff0d73 Mon Sep 17 00:00:00 2001 From: Seema Khowala Date: Tue, 9 Jan 2018 14:45:44 -0800 Subject: gpu: nvgpu: gv11b: skip mmu fault buf alloc after resume Skip allocating memory if required s/w set up for mmu fault buffers is already done. Bug 2045228 Change-Id: Ib88e8dd4f54b3f0faf7dc9edf091ec285220f7b5 Signed-off-by: Seema Khowala Reviewed-on: https://git-master.nvidia.com/r/1640516 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gv11b/mm_gv11b.c | 39 +++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) (limited to 'drivers/gpu/nvgpu/gv11b/mm_gv11b.c') diff --git a/drivers/gpu/nvgpu/gv11b/mm_gv11b.c b/drivers/gpu/nvgpu/gv11b/mm_gv11b.c index 439bf9ed..8d307d7c 100644 --- a/drivers/gpu/nvgpu/gv11b/mm_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/mm_gv11b.c @@ -89,6 +89,12 @@ static int gv11b_mm_mmu_fault_info_buf_init(struct gk20a *g, { struct mmu_fault_info *fault_info_mem; + if (g->mm.fault_info[FAULT_TYPE_OTHER_AND_NONREPLAY] != NULL && + g->mm.fault_info[FAULT_TYPE_REPLAY] != NULL) { + *hub_intr_types |= HUB_INTR_TYPE_OTHER; + return 0; + } + fault_info_mem = nvgpu_kzalloc(g, sizeof(struct mmu_fault_info) * FAULT_TYPE_NUM); if (!fault_info_mem) { @@ -117,24 +123,31 @@ static void gv11b_mm_mmu_hw_fault_buf_init(struct gk20a *g, fb_size = (g->ops.fifo.get_num_fifos(g) + 1) * gmmu_fault_buf_size_v(); - err = nvgpu_dma_alloc_map_sys(vm, fb_size, + if (!nvgpu_mem_is_valid( + &g->mm.hw_fault_buf[FAULT_TYPE_OTHER_AND_NONREPLAY])) { + + err = nvgpu_dma_alloc_map_sys(vm, fb_size, &g->mm.hw_fault_buf[FAULT_TYPE_OTHER_AND_NONREPLAY]); - if (err) { - nvgpu_err(g, - "Error in hw mmu fault buf [0] alloc in bar2 vm "); - /* Fault will be snapped in pri reg but not in buffer */ - return; + if (err) { + nvgpu_err(g, + "Error in hw mmu fault buf [0] alloc in bar2 vm "); + /* Fault will be snapped in pri reg but not in buffer */ + return; + } } *hub_intr_types |= HUB_INTR_TYPE_NONREPLAY; - err = nvgpu_dma_alloc_map_sys(vm, fb_size, - &g->mm.hw_fault_buf[FAULT_TYPE_REPLAY]); - if (err) { - nvgpu_err(g, - "Error in hw mmu fault buf [1] alloc in bar2 vm "); - /* Fault will be snapped in pri reg but not in buffer */ - return; + if (!nvgpu_mem_is_valid( + &g->mm.hw_fault_buf[FAULT_TYPE_REPLAY])) { + err = nvgpu_dma_alloc_map_sys(vm, fb_size, + &g->mm.hw_fault_buf[FAULT_TYPE_REPLAY]); + if (err) { + nvgpu_err(g, + "Error in hw mmu fault buf [1] alloc in bar2 vm "); + /* Fault will be snapped in pri reg but not in buffer */ + return; + } } *hub_intr_types |= HUB_INTR_TYPE_REPLAY; -- cgit v1.2.2