diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/channel_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/channel_gk20a.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c index b7bccd07..e0beefb1 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c | |||
@@ -857,6 +857,8 @@ static void gk20a_free_channel(struct channel_gk20a *ch) | |||
857 | struct vm_gk20a *ch_vm = ch->vm; | 857 | struct vm_gk20a *ch_vm = ch->vm; |
858 | unsigned long timeout = gk20a_get_gr_idle_timeout(g); | 858 | unsigned long timeout = gk20a_get_gr_idle_timeout(g); |
859 | struct dbg_session_gk20a *dbg_s; | 859 | struct dbg_session_gk20a *dbg_s; |
860 | struct dbg_session_data *session_data, *tmp_s; | ||
861 | struct dbg_session_channel_data *ch_data, *tmp; | ||
860 | bool was_reset; | 862 | bool was_reset; |
861 | 863 | ||
862 | gk20a_dbg_fn(""); | 864 | gk20a_dbg_fn(""); |
@@ -992,14 +994,21 @@ unbind: | |||
992 | WARN_ON(ch->sync); | 994 | WARN_ON(ch->sync); |
993 | 995 | ||
994 | /* unlink all debug sessions */ | 996 | /* unlink all debug sessions */ |
995 | mutex_lock(&ch->dbg_s_lock); | 997 | mutex_lock(&g->dbg_sessions_lock); |
996 | 998 | ||
997 | list_for_each_entry(dbg_s, &ch->dbg_s_list, dbg_s_list_node) { | 999 | list_for_each_entry_safe(session_data, tmp_s, |
998 | dbg_s->ch = NULL; | 1000 | &ch->dbg_s_list, dbg_s_entry) { |
999 | list_del_init(&dbg_s->dbg_s_list_node); | 1001 | dbg_s = session_data->dbg_s; |
1002 | mutex_lock(&dbg_s->ch_list_lock); | ||
1003 | list_for_each_entry_safe(ch_data, tmp, | ||
1004 | &dbg_s->ch_list, ch_entry) { | ||
1005 | if (ch_data->chid == ch->hw_chid) | ||
1006 | dbg_unbind_single_channel_gk20a(dbg_s, ch_data); | ||
1007 | } | ||
1008 | mutex_unlock(&dbg_s->ch_list_lock); | ||
1000 | } | 1009 | } |
1001 | 1010 | ||
1002 | mutex_unlock(&ch->dbg_s_lock); | 1011 | mutex_unlock(&g->dbg_sessions_lock); |
1003 | 1012 | ||
1004 | release: | 1013 | release: |
1005 | /* make sure we catch accesses of unopened channels in case | 1014 | /* make sure we catch accesses of unopened channels in case |