summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/semaphore_gk20a.c
diff options
context:
space:
mode:
authorAlex Waterman <alexw@nvidia.com>2016-08-30 16:45:18 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2016-08-31 17:04:12 -0400
commit0ea97181f2505ed9ecd079e79e7d87d3b149e20f (patch)
tree5a9b2329f8f76c7e9a69026744a513fb338e5d76 /drivers/gpu/nvgpu/gk20a/semaphore_gk20a.c
parent9247b610d201092c8f64b67dc141d2db66982aeb (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/gk20a/semaphore_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/semaphore_gk20a.c11
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;