From 8144bf64163f23844bae958fbe4d7df3ccc7c66a Mon Sep 17 00:00:00 2001 From: Shridhar Rasal Date: Tue, 22 Apr 2014 21:15:25 +0530 Subject: gpu: nvgpu: mm: free allocations on validate error Free allocated virtual address when marking PTE for validation or update fails. Bug 1479803 Change-Id: I9a8bd7c245b478f4252a261f246002fcc65d750d Signed-off-by: Shridhar Rasal (cherry picked from commit b5c0ad4e00dfc86b65e8efe3d8691b5cfaafbe4c) Reviewed-on: http://git-master/r/415248 Reviewed-by: Bharat Nihalani --- drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a/mm_gk20a.c') diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index 9de589f9..af7e0b51 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c @@ -1103,6 +1103,7 @@ static u64 __locked_gmmu_map(struct vm_gk20a *vm, int rw_flag) { int err = 0, i = 0; + bool allocated = false; u32 pde_lo, pde_hi; struct device *d = dev_from_vm(vm); @@ -1113,8 +1114,9 @@ static u64 __locked_gmmu_map(struct vm_gk20a *vm, if (!map_offset) { gk20a_err(d, "failed to allocate va space"); err = -ENOMEM; - goto fail; + goto fail_alloc; } + allocated = true; } pde_range_from_vaddr_range(vm, @@ -1129,7 +1131,7 @@ static u64 __locked_gmmu_map(struct vm_gk20a *vm, if (err) { gk20a_err(d, "failed to validate page table %d: %d", i, err); - goto fail; + goto fail_validate; } } @@ -1143,11 +1145,14 @@ static u64 __locked_gmmu_map(struct vm_gk20a *vm, rw_flag); if (err) { gk20a_err(d, "failed to update ptes on map"); - goto fail; + goto fail_validate; } return map_offset; - fail: +fail_validate: + if (allocated) + gk20a_vm_free_va(vm, map_offset, size, pgsz_idx); +fail_alloc: gk20a_err(d, "%s: failed with err=%d\n", __func__, err); return 0; } -- cgit v1.2.2