summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorKonsta Holtta <kholtta@nvidia.com>2014-11-12 10:03:32 -0500
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:12:13 -0400
commit59339b4fd9b0e5573a68207b9acc2561cb0174ed (patch)
tree7a0c2a7443bafae10fda4eef380f649ff2407c73 /drivers
parent0cc118c08c30e54073e5b8729c859a08ddbe3785 (diff)
gpu: nvgpu: allocator: release semaphore on error
Release rw_sema properly when block allocator runs out of memory and returns error. Change-Id: I6b7cf9564ae25ad1ba30edfcb1ae8a20cf7dc9db Signed-off-by: Konsta Holtta <kholtta@nvidia.com> Reviewed-on: http://git-master/r/601792 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a_allocator.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_allocator.c b/drivers/gpu/nvgpu/gk20a/gk20a_allocator.c
index b404799f..0b5f9f6f 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a_allocator.c
+++ b/drivers/gpu/nvgpu/gk20a/gk20a_allocator.c
@@ -89,8 +89,10 @@ int gk20a_allocator_block_alloc(struct gk20a_allocator *allocator,
89 len, 89 len,
90 allocator->align - 1); 90 allocator->align - 1);
91 if ((_addr > allocator->limit - allocator->base + 1) || 91 if ((_addr > allocator->limit - allocator->base + 1) ||
92 (*addr && *addr != (_addr + allocator->base))) 92 (*addr && *addr != (_addr + allocator->base))) {
93 up_write(&allocator->rw_sema);
93 return -ENOMEM; 94 return -ENOMEM;
95 }
94 96
95 bitmap_set(allocator->bitmap, _addr, len); 97 bitmap_set(allocator->bitmap, _addr, len);
96 *addr = allocator->base + _addr; 98 *addr = allocator->base + _addr;