diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2017-03-15 08:10:04 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-03-30 15:36:15 -0400 |
commit | caee1441b899383a10b2848e43dc4255f8d5342f (patch) | |
tree | 899bb5ebfcbbc41639304f8167d8116dbbfd3781 | |
parent | e239cad2d97c4337f4bbea5a4928044bae12d6db (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>
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/sched_gk20a.c | 38 |
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 | ||
689 | free_control_lock: | ||
690 | nvgpu_mutex_destroy(&sched->control_lock); | ||
691 | free_status_lock: | ||
692 | nvgpu_mutex_destroy(&sched->status_lock); | ||
693 | free_ref: | ||
694 | nvgpu_kfree(g, sched->ref_tsg_bitmap); | ||
675 | free_recent: | 695 | free_recent: |
676 | nvgpu_kfree(g, sched->recent_tsg_bitmap); | 696 | nvgpu_kfree(g, sched->recent_tsg_bitmap); |
677 | |||
678 | free_active: | 697 | free_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 | ||
684 | void gk20a_sched_ctrl_cleanup(struct gk20a *g) | 703 | void 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 | } |