summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
diff options
context:
space:
mode:
authorCory Perry <cperry@nvidia.com>2016-07-29 00:56:30 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2016-09-01 11:03:51 -0400
commitc38cc24e1a752d6eb5b07d771ddbf6ab700f695d (patch)
tree4cb2746e0ce87f7295166b5d93ad4ca67fcddac2 /drivers/gpu/nvgpu/gk20a/gr_gk20a.c
parent0ea97181f2505ed9ecd079e79e7d87d3b149e20f (diff)
gpu: nvgpu: send only one event to the debugger
Event notifications on TSGs should only be sent to the channel that caused the event to happen in the first place, not evey channel in the tsg. Any more and the debugger will not be able to tell what channel actually got the event. Worse yet, if all the channels in a tsg are bound to the same debug session (as is the case with cuda-gdb), then multiple nvgpu events for the same gpu event will be triggered, causing events to be buffered and the client to get out of sync. One gpu exception, one nvgpu event per tsg. Bug 1793988 Signed-off-by: Cory Perry <cperry@nvidia.com> Change-Id: I4efb83b0593bd1af38f2342c80793d9db56e42b1 Reviewed-on: http://git-master/r/1194203 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c13
1 files changed, 1 insertions, 12 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index 271c384a..57a02622 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -6260,18 +6260,7 @@ int gk20a_gr_isr(struct gk20a *g)
6260 6260
6261 /* signal clients waiting on an event */ 6261 /* signal clients waiting on an event */
6262 if (gk20a_gr_sm_debugger_attached(g) && post_event && fault_ch) { 6262 if (gk20a_gr_sm_debugger_attached(g) && post_event && fault_ch) {
6263 if (gk20a_is_channel_marked_as_tsg(fault_ch)) { 6263 gk20a_dbg_gpu_post_events(fault_ch);
6264 struct tsg_gk20a *tsg = &g->fifo.tsg[fault_ch->tsgid];
6265 struct channel_gk20a *__ch;
6266
6267 mutex_lock(&tsg->ch_list_lock);
6268 list_for_each_entry(__ch, &tsg->ch_list, ch_entry) {
6269 gk20a_dbg_gpu_post_events(__ch);
6270 }
6271 mutex_unlock(&tsg->ch_list_lock);
6272 } else {
6273 gk20a_dbg_gpu_post_events(fault_ch);
6274 }
6275 } 6264 }
6276 6265
6277 if (need_reset && ch) 6266 if (need_reset && ch)