summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a')
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_gk20a.c10
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h3
2 files changed, 13 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
index f90bc1a3..1cc0f154 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
@@ -351,6 +351,16 @@ static void channel_gk20a_unbind(struct channel_gk20a *ch_gk20a)
351 ccsr_channel_inst_bind_false_f()); 351 ccsr_channel_inst_bind_false_f());
352 352
353 ch_gk20a->bound = false; 353 ch_gk20a->bound = false;
354
355 /*
356 * if we are agrressive then we can destroy the syncpt
357 * resource at this point
358 * if not, then it will be destroyed at channel_free()
359 */
360 if (ch_gk20a->sync && ch_gk20a->sync->syncpt_aggressive_destroy) {
361 ch_gk20a->sync->destroy(ch_gk20a->sync);
362 ch_gk20a->sync = NULL;
363 }
354} 364}
355 365
356static int channel_gk20a_alloc_inst(struct gk20a *g, 366static int channel_gk20a_alloc_inst(struct gk20a *g,
diff --git a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h
index 69feb89f..80f38b26 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h
@@ -94,6 +94,9 @@ struct gk20a_channel_sync {
94 /* Reset the channel syncpoint/semaphore. */ 94 /* Reset the channel syncpoint/semaphore. */
95 void (*set_min_eq_max)(struct gk20a_channel_sync *s); 95 void (*set_min_eq_max)(struct gk20a_channel_sync *s);
96 96
97 /* flag to set syncpt destroy aggressiveness */
98 bool syncpt_aggressive_destroy;
99
97 /* Free the resources allocated by gk20a_channel_sync_create. */ 100 /* Free the resources allocated by gk20a_channel_sync_create. */
98 void (*destroy)(struct gk20a_channel_sync *s); 101 void (*destroy)(struct gk20a_channel_sync *s);
99}; 102};