mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 09:12:24 +03:00
gpu: nvgpu: skip channel abort for deferred reset
In case deferred_reset_pending is set in gk20a_fifo_handle_mmu_fault(), we skip resetting the engines and skip setting the error notifier Then we call gk20a_channel_abort()/gk20a_fifo_abort_tsg() which aborts the channels, and resets the syncpoint values to release all the waiters But since we don't set error notifier this could lead User to assume a successful submission without any error To fix this disable channel/TSG in case deferred_reset_pending is set and skip calls to gk20a_channel_abort()/gk20a_fifo_abort_tsg() Note that we finally abort the channel when channel is being closed Bug 200363077 Change-Id: Ia48ca369701c14d1913d8f7b66ed466b7b840224 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1665632 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-by: Winnie Hsu <whsu@nvidia.com>
This commit is contained in:
committed by
Winnie Hsu
parent
a8b5d8da59
commit
4d772455c5
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* GK20A Graphics FIFO (gr host)
|
* GK20A Graphics FIFO (gr host)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2011-2017, NVIDIA CORPORATION. All rights reserved.
|
* Copyright (c) 2011-2018, NVIDIA CORPORATION. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
@@ -1552,20 +1552,25 @@ static bool gk20a_fifo_handle_mmu_fault(
|
|||||||
* syncpoints */
|
* syncpoints */
|
||||||
|
|
||||||
if (tsg) {
|
if (tsg) {
|
||||||
if (!g->fifo.deferred_reset_pending)
|
if (g->fifo.deferred_reset_pending) {
|
||||||
|
gk20a_disable_tsg(tsg);
|
||||||
|
} else {
|
||||||
verbose =
|
verbose =
|
||||||
gk20a_fifo_set_ctx_mmu_error_tsg(g, tsg);
|
gk20a_fifo_set_ctx_mmu_error_tsg(g, tsg);
|
||||||
|
gk20a_fifo_abort_tsg(g, tsg->tsgid, false);
|
||||||
gk20a_fifo_abort_tsg(g, tsg->tsgid, false);
|
}
|
||||||
|
|
||||||
/* put back the ref taken early above */
|
/* put back the ref taken early above */
|
||||||
if (referenced_channel)
|
if (referenced_channel)
|
||||||
gk20a_channel_put(ch);
|
gk20a_channel_put(ch);
|
||||||
} else if (ch) {
|
} else if (ch) {
|
||||||
if (referenced_channel) {
|
if (referenced_channel) {
|
||||||
if (!g->fifo.deferred_reset_pending)
|
if (g->fifo.deferred_reset_pending) {
|
||||||
|
g->ops.fifo.disable_channel(ch);
|
||||||
|
} else {
|
||||||
verbose = gk20a_fifo_set_ctx_mmu_error_ch(g, ch);
|
verbose = gk20a_fifo_set_ctx_mmu_error_ch(g, ch);
|
||||||
gk20a_channel_abort(ch, false);
|
gk20a_channel_abort(ch, false);
|
||||||
|
}
|
||||||
gk20a_channel_put(ch);
|
gk20a_channel_put(ch);
|
||||||
} else {
|
} else {
|
||||||
gk20a_err(dev_from_gk20a(g),
|
gk20a_err(dev_from_gk20a(g),
|
||||||
|
|||||||
Reference in New Issue
Block a user