summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/sched_gk20a.c
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2017-03-15 08:10:04 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-03-30 15:36:15 -0400
commitcaee1441b899383a10b2848e43dc4255f8d5342f (patch)
tree899bb5ebfcbbc41639304f8167d8116dbbfd3781 /drivers/gpu/nvgpu/gk20a/sched_gk20a.c
parente239cad2d97c4337f4bbea5a4928044bae12d6db (diff)
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 <dnibade@nvidia.com> Reviewed-on: http://git-master/r/1321292 Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/sched_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/sched_gk20a.c38
1 files changed, 31 insertions, 7 deletions
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)
640{ 640{
641 struct gk20a_sched_ctrl *sched = &g->sched_ctrl; 641 struct gk20a_sched_ctrl *sched = &g->sched_ctrl;
642 struct fifo_gk20a *f = &g->fifo; 642 struct fifo_gk20a *f = &g->fifo;
643 int err;
643 644
644 if (sched->sw_ready) 645 if (sched->sw_ready)
645 return 0; 646 return 0;
@@ -656,29 +657,47 @@ int gk20a_sched_ctrl_init(struct gk20a *g)
656 return -ENOMEM; 657 return -ENOMEM;
657 658
658 sched->recent_tsg_bitmap = nvgpu_kzalloc(g, sched->bitmap_size); 659 sched->recent_tsg_bitmap = nvgpu_kzalloc(g, sched->bitmap_size);
659 if (!sched->recent_tsg_bitmap) 660 if (!sched->recent_tsg_bitmap) {
661 err = -ENOMEM;
660 goto free_active; 662 goto free_active;
663 }
661 664
662 sched->ref_tsg_bitmap = nvgpu_kzalloc(g, sched->bitmap_size); 665 sched->ref_tsg_bitmap = nvgpu_kzalloc(g, sched->bitmap_size);
663 if (!sched->ref_tsg_bitmap) 666 if (!sched->ref_tsg_bitmap) {
667 err = -ENOMEM;
664 goto free_recent; 668 goto free_recent;
669 }
665 670
666 init_waitqueue_head(&sched->readout_wq); 671 init_waitqueue_head(&sched->readout_wq);
667 nvgpu_mutex_init(&sched->status_lock); 672
668 nvgpu_mutex_init(&sched->control_lock); 673 err = nvgpu_mutex_init(&sched->status_lock);
669 nvgpu_mutex_init(&sched->busy_lock); 674 if (err)
675 goto free_ref;
676
677 err = nvgpu_mutex_init(&sched->control_lock);
678 if (err)
679 goto free_status_lock;
680
681 err = nvgpu_mutex_init(&sched->busy_lock);
682 if (err)
683 goto free_control_lock;
670 684
671 sched->sw_ready = true; 685 sched->sw_ready = true;
672 686
673 return 0; 687 return 0;
674 688
689free_control_lock:
690 nvgpu_mutex_destroy(&sched->control_lock);
691free_status_lock:
692 nvgpu_mutex_destroy(&sched->status_lock);
693free_ref:
694 nvgpu_kfree(g, sched->ref_tsg_bitmap);
675free_recent: 695free_recent:
676 nvgpu_kfree(g, sched->recent_tsg_bitmap); 696 nvgpu_kfree(g, sched->recent_tsg_bitmap);
677
678free_active: 697free_active:
679 nvgpu_kfree(g, sched->active_tsg_bitmap); 698 nvgpu_kfree(g, sched->active_tsg_bitmap);
680 699
681 return -ENOMEM; 700 return err;
682} 701}
683 702
684void gk20a_sched_ctrl_cleanup(struct gk20a *g) 703void gk20a_sched_ctrl_cleanup(struct gk20a *g)
@@ -691,5 +710,10 @@ void gk20a_sched_ctrl_cleanup(struct gk20a *g)
691 sched->active_tsg_bitmap = NULL; 710 sched->active_tsg_bitmap = NULL;
692 sched->recent_tsg_bitmap = NULL; 711 sched->recent_tsg_bitmap = NULL;
693 sched->ref_tsg_bitmap = NULL; 712 sched->ref_tsg_bitmap = NULL;
713
714 nvgpu_mutex_destroy(&sched->status_lock);
715 nvgpu_mutex_destroy(&sched->control_lock);
716 nvgpu_mutex_destroy(&sched->busy_lock);
717
694 sched->sw_ready = false; 718 sched->sw_ready = false;
695} 719}