diff options
author | Alex Waterman <alexw@nvidia.com> | 2016-08-30 16:45:18 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2016-08-31 17:04:12 -0400 |
commit | 0ea97181f2505ed9ecd079e79e7d87d3b149e20f (patch) | |
tree | 5a9b2329f8f76c7e9a69026744a513fb338e5d76 /drivers/gpu/nvgpu | |
parent | 9247b610d201092c8f64b67dc141d2db66982aeb (diff) |
gpu: nvgpu: Fix error handling of __semaphore_bitmap_alloc()
The return from __semaphore_bitmap_alloc() is an int for which a
negative value indicates a failure. That return value was being
directly cast to an unsigned int before being checked for a
negative error code. This obviously isn't a good idea.
Coverity ID 38754
Change-Id: I50c0478e5504988b059e69b929e9c2e465df7cc0
Signed-off-by: Alex Waterman <alexw@nvidia.com>
Reviewed-on: http://git-master/r/1210317
GVS: Gerrit_Virtual_Submit
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/semaphore_gk20a.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/semaphore_gk20a.c b/drivers/gpu/nvgpu/gk20a/semaphore_gk20a.c index 0fa31468..2038e300 100644 --- a/drivers/gpu/nvgpu/gk20a/semaphore_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/semaphore_gk20a.c | |||
@@ -122,7 +122,7 @@ struct gk20a_semaphore_pool *gk20a_semaphore_pool_alloc( | |||
122 | { | 122 | { |
123 | struct gk20a_semaphore_pool *p; | 123 | struct gk20a_semaphore_pool *p; |
124 | unsigned long page_idx; | 124 | unsigned long page_idx; |
125 | int err = 0; | 125 | int ret, err = 0; |
126 | 126 | ||
127 | p = kzalloc(sizeof(*p), GFP_KERNEL); | 127 | p = kzalloc(sizeof(*p), GFP_KERNEL); |
128 | if (!p) | 128 | if (!p) |
@@ -130,13 +130,14 @@ struct gk20a_semaphore_pool *gk20a_semaphore_pool_alloc( | |||
130 | 130 | ||
131 | __lock_sema_sea(sea); | 131 | __lock_sema_sea(sea); |
132 | 132 | ||
133 | page_idx = __semaphore_bitmap_alloc(sea->pools_alloced, | 133 | ret = __semaphore_bitmap_alloc(sea->pools_alloced, SEMAPHORE_POOL_COUNT); |
134 | SEMAPHORE_POOL_COUNT); | 134 | if (ret < 0) { |
135 | if (page_idx < 0) { | 135 | err = ret; |
136 | err = page_idx; | ||
137 | goto fail; | 136 | goto fail; |
138 | } | 137 | } |
139 | 138 | ||
139 | page_idx = (unsigned long)ret; | ||
140 | |||
140 | p->page = sea->sea_mem.pages[page_idx]; | 141 | p->page = sea->sea_mem.pages[page_idx]; |
141 | p->ro_sg_table = sea->ro_sg_table; | 142 | p->ro_sg_table = sea->ro_sg_table; |
142 | p->page_idx = page_idx; | 143 | p->page_idx = page_idx; |