diff options
author | Sachit Kadle <skadle@nvidia.com> | 2016-09-14 14:45:38 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2016-10-21 14:23:53 -0400 |
commit | ab593b9ccd3132404406ef6340348fdb28c23bf0 (patch) | |
tree | 394624e853fdb5e7fbe380c1ee8f4f2fca9fe24d /drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h | |
parent | 55dba9f1a91a6f94fb63090880ae28eedf4189a2 (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.h | 7 |
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 | ||
100 | void gk20a_channel_sync_destroy(struct gk20a_channel_sync *sync); | 102 | void gk20a_channel_sync_destroy(struct gk20a_channel_sync *sync); |
101 | struct gk20a_channel_sync *gk20a_channel_sync_create(struct channel_gk20a *c); | 103 | struct gk20a_channel_sync *gk20a_channel_sync_create(struct channel_gk20a *c); |
104 | bool gk20a_channel_sync_needs_sync_framework(struct channel_gk20a *c); | ||
102 | 105 | ||
103 | #endif | 106 | #endif |