summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gk20a.c
diff options
context:
space:
mode:
authorSeshendra Gadagottu <sgadagottu@nvidia.com>2016-05-24 19:38:30 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2016-05-25 18:34:56 -0400
commit6bbc169d33ae601b5947c1e54806b9f9bfa6054e (patch)
treebbd36efa03e2bb927968da289d3a459f8b04483e /drivers/gpu/nvgpu/gk20a/gk20a.c
parentc8103a39ad78230266045bdb50c95b733c2042a2 (diff)
gpu: nvgpu: reorder disable_irq
Disable irqs before suspending gpu sub-units. This is to prevent potential races between irq threads and suspend routines. Change-Id: Icc60f517db8ae8129bcf10be53d37d34b6d9242c Signed-off-by: Seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-on: http://git-master/r/1152844 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c
index a381fa4a..2e40a675 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.c
@@ -705,6 +705,13 @@ static int gk20a_pm_prepare_poweroff(struct device *dev)
705 if (!g->power_on) 705 if (!g->power_on)
706 goto done; 706 goto done;
707 707
708 /*
709 * After this point, gk20a interrupts should not get
710 * serviced.
711 */
712 disable_irq(g->irq_stall);
713 disable_irq(g->irq_nonstall);
714
708 gk20a_scale_suspend(dev); 715 gk20a_scale_suspend(dev);
709 716
710 /* cancel any pending cde work */ 717 /* cancel any pending cde work */
@@ -716,12 +723,6 @@ static int gk20a_pm_prepare_poweroff(struct device *dev)
716 723
717 /* disable elpg before gr or fifo suspend */ 724 /* disable elpg before gr or fifo suspend */
718 ret |= gk20a_pmu_destroy(g); 725 ret |= gk20a_pmu_destroy(g);
719 /*
720 * After this point, gk20a interrupts should not get
721 * serviced.
722 */
723 disable_irq(g->irq_stall);
724 disable_irq(g->irq_nonstall);
725 726
726 ret |= gk20a_gr_suspend(g); 727 ret |= gk20a_gr_suspend(g);
727 ret |= gk20a_mm_suspend(g); 728 ret |= gk20a_mm_suspend(g);