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 --- include/trace/events/gk20a.h | 47 +++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 16 deletions(-) (limited to 'include/trace/events') diff --git a/include/trace/events/gk20a.h b/include/trace/events/gk20a.h index fc5cb872..ba71dda2 100644 --- a/include/trace/events/gk20a.h +++ b/include/trace/events/gk20a.h @@ -192,9 +192,11 @@ DEFINE_EVENT(gk20a_channel_getput, gk20a_channel_put_nofree, DECLARE_EVENT_CLASS(gk20a_channel_sched_params, TP_PROTO(int chid, int tsgid, pid_t pid, u32 timeslice, - u32 timeout, const char *interleave, const char *preempt_mode), + u32 timeout, const char *interleave, + const char *graphics_preempt_mode, + const char *compute_preempt_mode), TP_ARGS(chid, tsgid, pid, timeslice, timeout, - interleave, preempt_mode), + interleave, graphics_preempt_mode, compute_preempt_mode), TP_STRUCT__entry( __field(int, chid) __field(int, tsgid) @@ -202,7 +204,8 @@ DECLARE_EVENT_CLASS(gk20a_channel_sched_params, __field(u32, timeslice) __field(u32, timeout) __field(const char *, interleave) /* no need to copy */ - __field(const char *, preempt_mode) /* no need to copy */ + __field(const char *, graphics_preempt_mode) /* no need to copy */ + __field(const char *, compute_preempt_mode) /* no need to copy */ ), TP_fast_assign( __entry->chid = chid; @@ -211,47 +214,59 @@ DECLARE_EVENT_CLASS(gk20a_channel_sched_params, __entry->timeslice = timeslice; __entry->timeout = timeout; __entry->interleave = interleave; - __entry->preempt_mode = preempt_mode; + __entry->graphics_preempt_mode = graphics_preempt_mode; + __entry->compute_preempt_mode = compute_preempt_mode; ), - TP_printk("chid=%d tsgid=%d pid=%d timeslice=%u timeout=%u interleave=%s preempt=%s", + TP_printk("chid=%d tsgid=%d pid=%d timeslice=%u timeout=%u interleave=%s graphics_preempt=%s compute_preempt=%s", __entry->chid, __entry->tsgid, __entry->pid, __entry->timeslice, __entry->timeout, - __entry->interleave, __entry->preempt_mode) + __entry->interleave, __entry->graphics_preempt_mode, + __entry->compute_preempt_mode) ); DEFINE_EVENT(gk20a_channel_sched_params, gk20a_channel_sched_defaults, TP_PROTO(int chid, int tsgid, pid_t pid, u32 timeslice, - u32 timeout, const char *interleave, const char *preempt_mode), + u32 timeout, const char *interleave, + const char *graphics_preempt_mode, + const char *compute_preempt_mode), TP_ARGS(chid, tsgid, pid, timeslice, timeout, - interleave, preempt_mode) + interleave, graphics_preempt_mode, compute_preempt_mode) ); DEFINE_EVENT(gk20a_channel_sched_params, gk20a_channel_set_priority, TP_PROTO(int chid, int tsgid, pid_t pid, u32 timeslice, - u32 timeout, const char *interleave, const char *preempt_mode), + u32 timeout, const char *interleave, + const char *graphics_preempt_mode, + const char *compute_preempt_mode), TP_ARGS(chid, tsgid, pid, timeslice, timeout, - interleave, preempt_mode) + interleave, graphics_preempt_mode, compute_preempt_mode) ); DEFINE_EVENT(gk20a_channel_sched_params, gk20a_channel_set_runlist_interleave, TP_PROTO(int chid, int tsgid, pid_t pid, u32 timeslice, - u32 timeout, const char *interleave, const char *preempt_mode), + u32 timeout, const char *interleave, + const char *graphics_preempt_mode, + const char *compute_preempt_mode), TP_ARGS(chid, tsgid, pid, timeslice, timeout, - interleave, preempt_mode) + interleave, graphics_preempt_mode, compute_preempt_mode) ); DEFINE_EVENT(gk20a_channel_sched_params, gk20a_channel_set_timeslice, TP_PROTO(int chid, int tsgid, pid_t pid, u32 timeslice, - u32 timeout, const char *interleave, const char *preempt_mode), + u32 timeout, const char *interleave, + const char *graphics_preempt_mode, + const char *compute_preempt_mode), TP_ARGS(chid, tsgid, pid, timeslice, timeout, - interleave, preempt_mode) + interleave, graphics_preempt_mode, compute_preempt_mode) ); DEFINE_EVENT(gk20a_channel_sched_params, gk20a_channel_set_timeout, TP_PROTO(int chid, int tsgid, pid_t pid, u32 timeslice, - u32 timeout, const char *interleave, const char *preempt_mode), + u32 timeout, const char *interleave, + const char *graphics_preempt_mode, + const char *compute_preempt_mode), TP_ARGS(chid, tsgid, pid, timeslice, timeout, - interleave, preempt_mode) + interleave, graphics_preempt_mode, compute_preempt_mode) ); TRACE_EVENT(gk20a_push_cmdbuf, -- cgit v1.2.2