diff options
author | Konsta Holtta <kholtta@nvidia.com> | 2014-11-12 10:03:32 -0500 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-03-18 15:12:13 -0400 |
commit | 59339b4fd9b0e5573a68207b9acc2561cb0174ed (patch) | |
tree | 7a0c2a7443bafae10fda4eef380f649ff2407c73 /drivers | |
parent | 0cc118c08c30e54073e5b8729c859a08ddbe3785 (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.c | 4 |
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; |