summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gk20a.h
diff options
context:
space:
mode:
authorThomas Fleury <tfleury@nvidia.com>2016-08-24 18:12:35 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2016-08-29 19:14:40 -0400
commitfba43012c092b7566a1e83d140e0c5f170de62f0 (patch)
tree4e893772b571b4c96b8284c8a7118faea31f129e /drivers/gpu/nvgpu/gk20a/gk20a.h
parent7298414969ff659241f4fe1d8111bc54ae335d5e (diff)
gpu: nvgpu: do not flush FECS record on engine reset
Flushing timestamp record method can fail in case FECS is not processing the main method queue. In particular, this occurs in case of ctxsw timeout, where we process fifo sched interrupts from the host, but FECS is still waiting for idle (grWFI). In such scenario, this adds huge delay in fifo recovery procedure (timeout on FECS method). Since flushing the last (incomplete) record from FECS would only be useful in that case (context switch ongoing), remove flush operation on engine reset. Note that an explicit ENGINE_RESET event (with pid) is inserted in user-facing ctxsw buffer on engine reset. Bug 200228310 Change-Id: I885525f8f197f81266b50db161bb511867fc74f4 Signed-off-by: Thomas Fleury <tfleury@nvidia.com> Reviewed-on: http://git-master/r/1207305 (cherry picked from commit 44391b6204fd648949295f90481b0c424d9a5ddf) Reviewed-on: http://git-master/r/1208414 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gk20a.h')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index 463317e3..2b348677 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -484,6 +484,7 @@ struct gpu_ops {
484 int (*poll)(struct gk20a *g); 484 int (*poll)(struct gk20a *g);
485 int (*enable)(struct gk20a *g); 485 int (*enable)(struct gk20a *g);
486 int (*disable)(struct gk20a *g); 486 int (*disable)(struct gk20a *g);
487 bool (*is_enabled)(struct gk20a *g);
487 int (*reset)(struct gk20a *g); 488 int (*reset)(struct gk20a *g);
488 int (*bind_channel)(struct gk20a *, struct channel_gk20a *); 489 int (*bind_channel)(struct gk20a *, struct channel_gk20a *);
489 int (*unbind_channel)(struct gk20a *, struct channel_gk20a *); 490 int (*unbind_channel)(struct gk20a *, struct channel_gk20a *);