summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/common/semaphore.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/common/semaphore.c')
-rw-r--r--drivers/gpu/nvgpu/common/semaphore.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/drivers/gpu/nvgpu/common/semaphore.c b/drivers/gpu/nvgpu/common/semaphore.c
index b2238bb7..fe4131c3 100644
--- a/drivers/gpu/nvgpu/common/semaphore.c
+++ b/drivers/gpu/nvgpu/common/semaphore.c
@@ -146,29 +146,27 @@ static int __semaphore_bitmap_alloc(unsigned long *bitmap, unsigned long len)
146/* 146/*
147 * Allocate a pool from the sea. 147 * Allocate a pool from the sea.
148 */ 148 */
149struct nvgpu_semaphore_pool *nvgpu_semaphore_pool_alloc( 149int nvgpu_semaphore_pool_alloc(struct nvgpu_semaphore_sea *sea,
150 struct nvgpu_semaphore_sea *sea) 150 struct nvgpu_semaphore_pool **pool)
151{ 151{
152 struct nvgpu_semaphore_pool *p; 152 struct nvgpu_semaphore_pool *p;
153 unsigned long page_idx; 153 unsigned long page_idx;
154 int ret, err = 0; 154 int ret;
155 155
156 p = nvgpu_kzalloc(sea->gk20a, sizeof(*p)); 156 p = nvgpu_kzalloc(sea->gk20a, sizeof(*p));
157 if (!p) 157 if (!p)
158 return ERR_PTR(-ENOMEM); 158 return -ENOMEM;
159 159
160 __lock_sema_sea(sea); 160 __lock_sema_sea(sea);
161 161
162 err = nvgpu_mutex_init(&p->pool_lock); 162 ret = nvgpu_mutex_init(&p->pool_lock);
163 if (err) 163 if (ret)
164 goto fail; 164 goto fail;
165 165
166 ret = __semaphore_bitmap_alloc(sea->pools_alloced, 166 ret = __semaphore_bitmap_alloc(sea->pools_alloced,
167 SEMAPHORE_POOL_COUNT); 167 SEMAPHORE_POOL_COUNT);
168 if (ret < 0) { 168 if (ret < 0)
169 err = ret;
170 goto fail_alloc; 169 goto fail_alloc;
171 }
172 170
173 page_idx = (unsigned long)ret; 171 page_idx = (unsigned long)ret;
174 172
@@ -184,7 +182,8 @@ struct nvgpu_semaphore_pool *nvgpu_semaphore_pool_alloc(
184 gpu_sema_dbg(sea->gk20a, 182 gpu_sema_dbg(sea->gk20a,
185 "Allocated semaphore pool: page-idx=%d", p->page_idx); 183 "Allocated semaphore pool: page-idx=%d", p->page_idx);
186 184
187 return p; 185 *pool = p;
186 return 0;
188 187
189fail_alloc: 188fail_alloc:
190 nvgpu_mutex_destroy(&p->pool_lock); 189 nvgpu_mutex_destroy(&p->pool_lock);
@@ -192,7 +191,7 @@ fail:
192 __unlock_sema_sea(sea); 191 __unlock_sema_sea(sea);
193 nvgpu_kfree(sea->gk20a, p); 192 nvgpu_kfree(sea->gk20a, p);
194 gpu_sema_dbg(sea->gk20a, "Failed to allocate semaphore pool!"); 193 gpu_sema_dbg(sea->gk20a, "Failed to allocate semaphore pool!");
195 return ERR_PTR(err); 194 return ret;
196} 195}
197 196
198/* 197/*