summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h
diff options
context:
space:
mode:
authorSachit Kadle <skadle@nvidia.com>2016-09-14 14:45:38 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2016-10-21 14:23:53 -0400
commitab593b9ccd3132404406ef6340348fdb28c23bf0 (patch)
tree394624e853fdb5e7fbe380c1ee8f4f2fca9fe24d /drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h
parent55dba9f1a91a6f94fb63090880ae28eedf4189a2 (diff)
gpu: nvgpu: make deferred clean-up conditional
This change makes the invocation of the deferred job clean-up mechanism conditional. For submissions that require job tracking, deferred clean-up is only required if any of the following conditions are met: 1) Channel's deterministic flag is not set 2) Rail-gating is enabled 3) Channel WDT is enabled 4) Buffer refcounting is enabled 5) Dependency on Sync Framework In case deferred clean-up is not needed, we clean-up a single job tracking resource in the submit path. For deterministic channels, we do not allow deferred clean-up to occur and fail any submits that require it. Bug 1795076 Change-Id: I4021dffe8a71aa58f12db6b58518d3f4021f3313 Signed-off-by: Sachit Kadle <skadle@nvidia.com> Reviewed-on: http://git-master/r/1220920 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com> (cherry picked from commit b09f7589d5ad3c496e7350f1ed583a4fe2db574a) Reviewed-on: http://git-master/r/1223941 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h')
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h
index c3a92ad2..5e75dd9b 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h
@@ -57,7 +57,8 @@ struct gk20a_channel_sync {
57 int (*incr)(struct gk20a_channel_sync *s, 57 int (*incr)(struct gk20a_channel_sync *s,
58 struct priv_cmd_entry *entry, 58 struct priv_cmd_entry *entry,
59 struct gk20a_fence *fence, 59 struct gk20a_fence *fence,
60 bool need_sync_fence); 60 bool need_sync_fence,
61 bool register_irq);
61 62
62 /* Increment syncpoint/semaphore, preceded by a wfi. 63 /* Increment syncpoint/semaphore, preceded by a wfi.
63 * Returns 64 * Returns
@@ -80,7 +81,8 @@ struct gk20a_channel_sync {
80 struct priv_cmd_entry *entry, 81 struct priv_cmd_entry *entry,
81 struct gk20a_fence *fence, 82 struct gk20a_fence *fence,
82 bool wfi, 83 bool wfi,
83 bool need_sync_fence); 84 bool need_sync_fence,
85 bool register_irq);
84 86
85 /* Reset the channel syncpoint/semaphore. */ 87 /* Reset the channel syncpoint/semaphore. */
86 void (*set_min_eq_max)(struct gk20a_channel_sync *s); 88 void (*set_min_eq_max)(struct gk20a_channel_sync *s);
@@ -99,5 +101,6 @@ struct gk20a_channel_sync {
99 101
100void gk20a_channel_sync_destroy(struct gk20a_channel_sync *sync); 102void gk20a_channel_sync_destroy(struct gk20a_channel_sync *sync);
101struct gk20a_channel_sync *gk20a_channel_sync_create(struct channel_gk20a *c); 103struct gk20a_channel_sync *gk20a_channel_sync_create(struct channel_gk20a *c);
104bool gk20a_channel_sync_needs_sync_framework(struct channel_gk20a *c);
102 105
103#endif 106#endif