summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2016-08-01 07:32:31 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2016-08-12 12:51:23 -0400
commit33ff34887f560449828e79170a2a36a97496eeec (patch)
tree89fbc068163ab18b46487bd8f0ee70b82b6c9c95 /drivers/gpu/nvgpu/gk20a/channel_gk20a.c
parent1b216d778a7938072aa2a68ebef38bb954418257 (diff)
gpu: nvgpu: fix deferred engine reset sequence
We currently store fault_id into fifo.deferred_fault_engines and use that in gk20a_fifo_reset_engine() which is incorrect Also, in deferred engine reset path during channel close, we do not check if channel is loaded on engine or not fix this with below - store engine_id bits into fifo.deferred_fault_engines - define new API gk20a_fifo_deferred_reset() to perform deferred engine reset - get all engines on which channel is loaded with gk20a_fifo_engines_on_id() - for each set bit/engine_id in fifo.deferred_fault_engines, check if channel is loaded on that engine, and if yes, reset the engine Bug 1791696 Change-Id: I1b8b1a9e3aa538fe6903a352aa732b47c95ec7d5 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: http://git-master/r/1195087 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/channel_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_gk20a.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
index eae2bdae..a8a39302 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
@@ -910,11 +910,8 @@ static void gk20a_free_channel(struct channel_gk20a *ch)
910 /* if lock is already taken, a reset is taking place 910 /* if lock is already taken, a reset is taking place
911 so no need to repeat */ 911 so no need to repeat */
912 if (!was_reset) 912 if (!was_reset)
913 gk20a_fifo_reset_engine(g, 913 gk20a_fifo_deferred_reset(g, ch);
914 g->fifo.deferred_fault_engines);
915 mutex_unlock(&g->fifo.gr_reset_mutex); 914 mutex_unlock(&g->fifo.gr_reset_mutex);
916 g->fifo.deferred_fault_engines = 0;
917 g->fifo.deferred_reset_pending = false;
918 } 915 }
919 mutex_unlock(&f->deferred_reset_mutex); 916 mutex_unlock(&f->deferred_reset_mutex);
920 917