From caee1441b899383a10b2848e43dc4255f8d5342f Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Wed, 15 Mar 2017 17:40:04 +0530 Subject: gpu: nvgpu: check return value of mutex_init in sched_gk20a.c - check return value of nvgpu_mutex_init in sched_gk20a.c - add corresponding nvgpu_mutex_destroy calls Jira NVGPU-13 Change-Id: I49013851e3f271b059a7b46d63816d8d385b48de Signed-off-by: Deepak Nibade Reviewed-on: http://git-master/r/1321292 Reviewed-by: svccoveritychecker GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/sched_gk20a.c | 38 ++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a/sched_gk20a.c') diff --git a/drivers/gpu/nvgpu/gk20a/sched_gk20a.c b/drivers/gpu/nvgpu/gk20a/sched_gk20a.c index 3185b211..49a09e99 100644 --- a/drivers/gpu/nvgpu/gk20a/sched_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/sched_gk20a.c @@ -640,6 +640,7 @@ int gk20a_sched_ctrl_init(struct gk20a *g) { struct gk20a_sched_ctrl *sched = &g->sched_ctrl; struct fifo_gk20a *f = &g->fifo; + int err; if (sched->sw_ready) return 0; @@ -656,29 +657,47 @@ int gk20a_sched_ctrl_init(struct gk20a *g) return -ENOMEM; sched->recent_tsg_bitmap = nvgpu_kzalloc(g, sched->bitmap_size); - if (!sched->recent_tsg_bitmap) + if (!sched->recent_tsg_bitmap) { + err = -ENOMEM; goto free_active; + } sched->ref_tsg_bitmap = nvgpu_kzalloc(g, sched->bitmap_size); - if (!sched->ref_tsg_bitmap) + if (!sched->ref_tsg_bitmap) { + err = -ENOMEM; goto free_recent; + } init_waitqueue_head(&sched->readout_wq); - nvgpu_mutex_init(&sched->status_lock); - nvgpu_mutex_init(&sched->control_lock); - nvgpu_mutex_init(&sched->busy_lock); + + err = nvgpu_mutex_init(&sched->status_lock); + if (err) + goto free_ref; + + err = nvgpu_mutex_init(&sched->control_lock); + if (err) + goto free_status_lock; + + err = nvgpu_mutex_init(&sched->busy_lock); + if (err) + goto free_control_lock; sched->sw_ready = true; return 0; +free_control_lock: + nvgpu_mutex_destroy(&sched->control_lock); +free_status_lock: + nvgpu_mutex_destroy(&sched->status_lock); +free_ref: + nvgpu_kfree(g, sched->ref_tsg_bitmap); free_recent: nvgpu_kfree(g, sched->recent_tsg_bitmap); - free_active: nvgpu_kfree(g, sched->active_tsg_bitmap); - return -ENOMEM; + return err; } void gk20a_sched_ctrl_cleanup(struct gk20a *g) @@ -691,5 +710,10 @@ void gk20a_sched_ctrl_cleanup(struct gk20a *g) sched->active_tsg_bitmap = NULL; sched->recent_tsg_bitmap = NULL; sched->ref_tsg_bitmap = NULL; + + nvgpu_mutex_destroy(&sched->status_lock); + nvgpu_mutex_destroy(&sched->control_lock); + nvgpu_mutex_destroy(&sched->busy_lock); + sched->sw_ready = false; } -- cgit v1.2.2