summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2018-07-06 02:29:13 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-07-06 11:24:01 -0400
commitc8347c83697b75823f6e5141b06b8e4669061b99 (patch)
treec0628cd0cf64cb7f0e7d8ff37e9982b219664d63 /drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
parent0297eed338f9d164a20c1b9224dac7138e152786 (diff)
gpu: nvgpu: ring doorbell after enabling TSG
In some use cases client will disable and preempt TSG and then re-enable it using IOCTLs provided In case there is only one context getting re-enabled and there is no other job submission in parallel runlist fetcher will just sleep until doorbell is received next time This causes above mentioned test cases to stall after re-enabling TSG until some one submits a new job and triggers a doorbell Fix this by explicitly triggering doorbell from gv11b_fifo_enable_tsg() after we enable all channels in TSG Bug 2205192 Change-Id: I08e70e3d0f7e4dc6471e63809e246430cc4200c1 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1772378 Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gv11b/fifo_gv11b.c')
-rw-r--r--drivers/gpu/nvgpu/gv11b/fifo_gv11b.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
index 9c64675f..75ff9525 100644
--- a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
@@ -808,13 +808,18 @@ int gv11b_fifo_enable_tsg(struct tsg_gk20a *tsg)
808{ 808{
809 struct gk20a *g = tsg->g; 809 struct gk20a *g = tsg->g;
810 struct channel_gk20a *ch; 810 struct channel_gk20a *ch;
811 struct channel_gk20a *last_ch = NULL;
811 812
812 nvgpu_rwsem_down_read(&tsg->ch_list_lock); 813 nvgpu_rwsem_down_read(&tsg->ch_list_lock);
813 nvgpu_list_for_each_entry(ch, &tsg->ch_list, channel_gk20a, ch_entry) { 814 nvgpu_list_for_each_entry(ch, &tsg->ch_list, channel_gk20a, ch_entry) {
814 g->ops.fifo.enable_channel(ch); 815 g->ops.fifo.enable_channel(ch);
816 last_ch = ch;
815 } 817 }
816 nvgpu_rwsem_up_read(&tsg->ch_list_lock); 818 nvgpu_rwsem_up_read(&tsg->ch_list_lock);
817 819
820 if (last_ch)
821 g->ops.fifo.ring_channel_doorbell(last_ch);
822
818 return 0; 823 return 0;
819} 824}
820 825