summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2015-10-05 04:24:37 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2015-10-07 18:03:28 -0400
commitd01a0249c40217236497728997b9c6ce8619acad (patch)
tree92872f27fc9e158ce294cc8ecf3737ce2d69eeb9 /drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
parent21508ec801ca32b58b48fe2fba039bfcb37ed206 (diff)
gpu: nvgpu: cancel all wdt timeouts while handling SCHED errors
A SCHED error might cause multiple channels' watchdogs to trigger simultaneously Hence, to avoid this conflict cancel watchdog timeout on all channels before recovering from SCHED errors Also, define API gk20a_channel_timeout_stop_all_channels() to cancel wdt timeout on all channels Bug 200133289 Change-Id: I8324c397891f0a711327b77d0677cd6718af6d01 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: http://git-master/r/810959 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/fifo_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/fifo_gk20a.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
index ae36478e..4f3363f2 100644
--- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
@@ -1450,6 +1450,7 @@ static bool gk20a_fifo_handle_sched_error(struct gk20a *g)
1450 struct channel_gk20a *ch = &f->channel[id]; 1450 struct channel_gk20a *ch = &f->channel[id];
1451 1451
1452 if (is_tsg) { 1452 if (is_tsg) {
1453 gk20a_channel_timeout_stop_all_channels(g);
1453 gk20a_fifo_recover(g, BIT(engine_id), id, true, 1454 gk20a_fifo_recover(g, BIT(engine_id), id, true,
1454 true, true); 1455 true, true);
1455 ret = true; 1456 ret = true;
@@ -1467,6 +1468,11 @@ static bool gk20a_fifo_handle_sched_error(struct gk20a *g)
1467 "fifo sched ctxsw timeout error:" 1468 "fifo sched ctxsw timeout error:"
1468 "engine = %u, ch = %d", engine_id, id); 1469 "engine = %u, ch = %d", engine_id, id);
1469 gk20a_gr_debug_dump(g->dev); 1470 gk20a_gr_debug_dump(g->dev);
1471 /*
1472 * Cancel all channels' timeout since SCHED error might
1473 * trigger multiple watchdogs at a time
1474 */
1475 gk20a_channel_timeout_stop_all_channels(g);
1470 gk20a_fifo_recover(g, BIT(engine_id), id, false, 1476 gk20a_fifo_recover(g, BIT(engine_id), id, false,
1471 true, ch->timeout_debug_dump); 1477 true, ch->timeout_debug_dump);
1472 ret = true; 1478 ret = true;