diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/nvgpu/clk/clk_arb.c | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/drivers/gpu/nvgpu/clk/clk_arb.c b/drivers/gpu/nvgpu/clk/clk_arb.c index c00a79ec..3bf64d0b 100644 --- a/drivers/gpu/nvgpu/clk/clk_arb.c +++ b/drivers/gpu/nvgpu/clk/clk_arb.c | |||
@@ -267,10 +267,14 @@ int nvgpu_clk_arb_init_arbiter(struct gk20a *g) | |||
267 | return 0; | 267 | return 0; |
268 | 268 | ||
269 | arb = kzalloc(sizeof(struct nvgpu_clk_arb), GFP_KERNEL); | 269 | arb = kzalloc(sizeof(struct nvgpu_clk_arb), GFP_KERNEL); |
270 | if (!arb) { | 270 | if (!arb) |
271 | err = -ENOMEM; | 271 | return -ENOMEM; |
272 | goto init_fail; | 272 | |
273 | } | 273 | err = nvgpu_mutex_init(&arb->pstate_lock); |
274 | if (err) | ||
275 | goto mutex_fail; | ||
276 | nvgpu_spinlock_init(&arb->sessions_lock); | ||
277 | nvgpu_spinlock_init(&arb->users_lock); | ||
274 | 278 | ||
275 | arb->mclk_f_points = kcalloc(MAX_F_POINTS, sizeof(u16), GFP_KERNEL); | 279 | arb->mclk_f_points = kcalloc(MAX_F_POINTS, sizeof(u16), GFP_KERNEL); |
276 | if (!arb->mclk_f_points) { | 280 | if (!arb->mclk_f_points) { |
@@ -308,10 +312,6 @@ int nvgpu_clk_arb_init_arbiter(struct gk20a *g) | |||
308 | g->clk_arb = arb; | 312 | g->clk_arb = arb; |
309 | arb->g = g; | 313 | arb->g = g; |
310 | 314 | ||
311 | nvgpu_mutex_init(&arb->pstate_lock); | ||
312 | nvgpu_spinlock_init(&arb->sessions_lock); | ||
313 | nvgpu_spinlock_init(&arb->users_lock); | ||
314 | |||
315 | err = g->ops.clk_arb.get_arbiter_clk_default(g, | 315 | err = g->ops.clk_arb.get_arbiter_clk_default(g, |
316 | CTRL_CLK_DOMAIN_MCLK, &default_mhz); | 316 | CTRL_CLK_DOMAIN_MCLK, &default_mhz); |
317 | if (err < 0) { | 317 | if (err < 0) { |
@@ -382,16 +382,17 @@ int nvgpu_clk_arb_init_arbiter(struct gk20a *g) | |||
382 | 382 | ||
383 | init_fail: | 383 | init_fail: |
384 | 384 | ||
385 | if (arb) { | 385 | kfree(arb->gpc2clk_f_points); |
386 | kfree(arb->gpc2clk_f_points); | 386 | kfree(arb->mclk_f_points); |
387 | kfree(arb->mclk_f_points); | ||
388 | 387 | ||
389 | for (index = 0; index < 2; index++) { | 388 | for (index = 0; index < 2; index++) { |
390 | kfree(arb->vf_table_pool[index].gpc2clk_points); | 389 | kfree(arb->vf_table_pool[index].gpc2clk_points); |
391 | kfree(arb->vf_table_pool[index].mclk_points); | 390 | kfree(arb->vf_table_pool[index].mclk_points); |
392 | } | ||
393 | } | 391 | } |
394 | 392 | ||
393 | nvgpu_mutex_destroy(&arb->pstate_lock); | ||
394 | |||
395 | mutex_fail: | ||
395 | kfree(arb); | 396 | kfree(arb); |
396 | 397 | ||
397 | return err; | 398 | return err; |
@@ -454,6 +455,7 @@ static void nvgpu_clk_arb_set_global_alarm(struct gk20a *g, u32 alarm) | |||
454 | 455 | ||
455 | void nvgpu_clk_arb_cleanup_arbiter(struct gk20a *g) | 456 | void nvgpu_clk_arb_cleanup_arbiter(struct gk20a *g) |
456 | { | 457 | { |
458 | nvgpu_mutex_destroy(&g->clk_arb->pstate_lock); | ||
457 | kfree(g->clk_arb); | 459 | kfree(g->clk_arb); |
458 | } | 460 | } |
459 | 461 | ||