diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2016-08-01 07:32:31 -0400 |
---|---|---|
committer | Terje Bergstrom <tbergstrom@nvidia.com> | 2016-08-12 12:51:23 -0400 |
commit | 33ff34887f560449828e79170a2a36a97496eeec (patch) | |
tree | 89fbc068163ab18b46487bd8f0ee70b82b6c9c95 /drivers/gpu/nvgpu/gk20a/channel_gk20a.c | |
parent | 1b216d778a7938072aa2a68ebef38bb954418257 (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.c | 5 |
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 | ||