diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2017-09-14 06:47:48 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-09-15 15:48:21 -0400 |
commit | 2b7e8a2c2a5df041c9a434804d0f3f6d9df82737 (patch) | |
tree | 126b14a854a75aa926966acfe41f4f5823711cfe /drivers/gpu/nvgpu/gk20a/gk20a.h | |
parent | 460951ed092aad787bacd0ebb0646b799d3463a1 (diff) |
gpu: nvgpu: fix channel unbind sequence from TSG
We right now remove a channel from TSG list and disable all the channels in
TSG while removing a channel from TSG
With this sequence if any one channel in TSG is closed, rest of the channels
are set as timed out and cannot be used anymore
We need to fix this sequence as below to allow removing a channel from active
TSG so that rest of the channels can still be used
- disable all channels of TSG
- preempt TSG
- check if CTX_RELOAD is set if support is available
if CTX_RELOAD is set on channel, it should be moved to some other channel
- check if FAULTED is set if support is available
- if NEXT is set on channel then it means channel is still active
print out an error in this case for the time being until properly handled
- remove the channel from runlist
- remove channel from TSG list
- re-enable rest of the channels in TSG
- clean up the channel (same as regular channels)
Add below fifo operations to support checking channel status
g->ops.fifo.tsg_verify_status_ctx_reload
g->ops.fifo.tsg_verify_status_faulted
Define ops.fifo.tsg_verify_status_ctx_reload operation for gm20b/gp10b/gp106
as gm20b_fifo_tsg_verify_status_ctx_reload()
This API will check if channel to be released has CTX_RELOAD set, if yes
CTX_RELOAD needs to be moved to some other channel in TSG
Remove static from channel_gk20a_update_runlist() and export it
Bug 200327095
Change-Id: I0dd4be7c7e0b9b759389ec12c5a148a4b919d3e2
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1560637
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Seshendra Gadagottu <sgadagottu@nvidia.com>
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gk20a.h')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index 4564b6e9..adc630e6 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h | |||
@@ -212,7 +212,7 @@ struct gpu_ops { | |||
212 | int (*load_ctxsw_ucode)(struct gk20a *g); | 212 | int (*load_ctxsw_ucode)(struct gk20a *g); |
213 | u32 (*get_gpc_tpc_mask)(struct gk20a *g, u32 gpc_index); | 213 | u32 (*get_gpc_tpc_mask)(struct gk20a *g, u32 gpc_index); |
214 | void (*set_gpc_tpc_mask)(struct gk20a *g, u32 gpc_index); | 214 | void (*set_gpc_tpc_mask)(struct gk20a *g, u32 gpc_index); |
215 | void (*free_channel_ctx)(struct channel_gk20a *c); | 215 | void (*free_channel_ctx)(struct channel_gk20a *c, bool is_tsg); |
216 | int (*alloc_obj_ctx)(struct channel_gk20a *c, | 216 | int (*alloc_obj_ctx)(struct channel_gk20a *c, |
217 | struct nvgpu_alloc_obj_ctx_args *args); | 217 | struct nvgpu_alloc_obj_ctx_args *args); |
218 | int (*bind_ctxsw_zcull)(struct gk20a *g, struct gr_gk20a *gr, | 218 | int (*bind_ctxsw_zcull)(struct gk20a *g, struct gr_gk20a *gr, |
@@ -477,6 +477,8 @@ struct gpu_ops { | |||
477 | int (*preempt_tsg)(struct gk20a *g, u32 tsgid); | 477 | int (*preempt_tsg)(struct gk20a *g, u32 tsgid); |
478 | int (*enable_tsg)(struct tsg_gk20a *tsg); | 478 | int (*enable_tsg)(struct tsg_gk20a *tsg); |
479 | int (*disable_tsg)(struct tsg_gk20a *tsg); | 479 | int (*disable_tsg)(struct tsg_gk20a *tsg); |
480 | void (*tsg_verify_status_ctx_reload)(struct channel_gk20a *ch); | ||
481 | void (*tsg_verify_status_faulted)(struct channel_gk20a *ch); | ||
480 | int (*reschedule_runlist)(struct gk20a *g, u32 runlist_id); | 482 | int (*reschedule_runlist)(struct gk20a *g, u32 runlist_id); |
481 | int (*update_runlist)(struct gk20a *g, u32 runlist_id, | 483 | int (*update_runlist)(struct gk20a *g, u32 runlist_id, |
482 | u32 chid, bool add, | 484 | u32 chid, bool add, |