From d868b654419cfa096f563c9281a2a5cc067c23db Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Tue, 19 Apr 2016 16:57:49 +0530 Subject: 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 Reviewed-on: http://git-master/r/1131805 Reviewed-by: Terje Bergstrom Tested-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/gk20a.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a/gk20a.h') 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 { int (*suspend_contexts)(struct gk20a *g, struct dbg_session_gk20a *dbg_s, int *ctx_resident_ch_fd); + int (*set_preemption_mode)(struct channel_gk20a *ch, + u32 graphics_preempt_mode, + u32 compute_preempt_mode); } gr; const char *name; struct { @@ -1098,7 +1101,9 @@ static inline struct tsg_gk20a *tsg_gk20a_from_ch(struct channel_gk20a *ch) tsg_gk20a_from_ch(ch)->timeslice_us : ch->timeslice_us, \ ch->timeout_ms_max, \ gk20a_fifo_interleave_level_name(ch->interleave_level), \ - gr_gk20a_preempt_mode_name(ch->ch_ctx.gr_ctx ? \ - ch->ch_ctx.gr_ctx->preempt_mode : 0) + gr_gk20a_graphics_preempt_mode_name(ch->ch_ctx.gr_ctx ? \ + ch->ch_ctx.gr_ctx->graphics_preempt_mode : 0), \ + gr_gk20a_compute_preempt_mode_name(ch->ch_ctx.gr_ctx ? \ + ch->ch_ctx.gr_ctx->compute_preempt_mode : 0) #endif /* GK20A_H */ -- cgit v1.2.2