summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gk20a.h
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2016-04-19 07:27:49 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2016-05-09 16:16:29 -0400
commitd868b654419cfa096f563c9281a2a5cc067c23db (patch)
treea11fc30ab435c6e2a4c54b97455d3f5c177ad507 /drivers/gpu/nvgpu/gk20a/gk20a.h
parentf14152c081d94710dbde843b8dcd9b3981afb831 (diff)
gpu: nvgpu: separate IOCTL to set preemption mode
Add separate IOCTL NVGPU_IOCTL_CHANNEL_SET_PREEMPTION_MODE to allow setting preemption modes from UMD Define preemption modes in nvgpu.h and use them everywhere Remove mode definitions from mm_gk20a.h Also, we support setting only one preemption mode in a channel But it is possible to have multiple preemption modes (one from graphics and one from compute) set simultaneously Hence, update struct gr_ctx_desc to include two separate preemption modes (graphics_preempt_mode and compute_preempt_mode) API NVGPU_IOCTL_CHANNEL_SET_PREEMPTION_MODE also supports setting two separate preemption modes i.e. one for graphics and one for compute Make necessary changes in code to support two preemption modes Bug 1646259 Change-Id: Ia1dea19e609ba8cc0de2f39ab6c0c4cd6b0a752c Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: http://git-master/r/1131805 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gk20a.h')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index ebc18d5d..64e410db 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -254,6 +254,9 @@ struct gpu_ops {
254 int (*suspend_contexts)(struct gk20a *g, 254 int (*suspend_contexts)(struct gk20a *g,
255 struct dbg_session_gk20a *dbg_s, 255 struct dbg_session_gk20a *dbg_s,
256 int *ctx_resident_ch_fd); 256 int *ctx_resident_ch_fd);
257 int (*set_preemption_mode)(struct channel_gk20a *ch,
258 u32 graphics_preempt_mode,
259 u32 compute_preempt_mode);
257 } gr; 260 } gr;
258 const char *name; 261 const char *name;
259 struct { 262 struct {
@@ -1098,7 +1101,9 @@ static inline struct tsg_gk20a *tsg_gk20a_from_ch(struct channel_gk20a *ch)
1098 tsg_gk20a_from_ch(ch)->timeslice_us : ch->timeslice_us, \ 1101 tsg_gk20a_from_ch(ch)->timeslice_us : ch->timeslice_us, \
1099 ch->timeout_ms_max, \ 1102 ch->timeout_ms_max, \
1100 gk20a_fifo_interleave_level_name(ch->interleave_level), \ 1103 gk20a_fifo_interleave_level_name(ch->interleave_level), \
1101 gr_gk20a_preempt_mode_name(ch->ch_ctx.gr_ctx ? \ 1104 gr_gk20a_graphics_preempt_mode_name(ch->ch_ctx.gr_ctx ? \
1102 ch->ch_ctx.gr_ctx->preempt_mode : 0) 1105 ch->ch_ctx.gr_ctx->graphics_preempt_mode : 0), \
1106 gr_gk20a_compute_preempt_mode_name(ch->ch_ctx.gr_ctx ? \
1107 ch->ch_ctx.gr_ctx->compute_preempt_mode : 0)
1103 1108
1104#endif /* GK20A_H */ 1109#endif /* GK20A_H */