From cae514120b2c6420127ac6102a2d3fd5023218d0 Mon Sep 17 00:00:00 2001 From: Konsta Holtta Date: Tue, 22 May 2018 12:59:02 +0300 Subject: gpu: nvgpu: abstract submit profiling Add gk20a_fifo_profile_snapshot() to store the submit time in a profiling entry that was acquired from gk20a_fifo_profile_acquire(). Also get rid of ifdef CONFIG_DEBUG_FS by stubbing the acquire and free functions when debugfs is not enabled. This reduces some cyclomatic complexity in the submit path. Jira NVGPU-708 Change-Id: I39829a6475cfe3aa582620219e420bde62228e52 Signed-off-by: Konsta Holtta Reviewed-on: https://git-master.nvidia.com/r/1729545 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/common/linux/channel.c | 14 +++++--------- drivers/gpu/nvgpu/common/linux/debug_fifo.c | 7 +++++++ drivers/gpu/nvgpu/common/linux/ioctl_channel.c | 14 +++++--------- drivers/gpu/nvgpu/gk20a/fifo_gk20a.h | 15 +++++++++++++++ 4 files changed, 32 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/nvgpu/common/linux/channel.c b/drivers/gpu/nvgpu/common/linux/channel.c index 727b5067..7810bc21 100644 --- a/drivers/gpu/nvgpu/common/linux/channel.c +++ b/drivers/gpu/nvgpu/common/linux/channel.c @@ -19,7 +19,6 @@ #include #include #include -#include /* * This is required for nvgpu_vm_find_buf() which is used in the tracing @@ -812,8 +811,7 @@ int gk20a_submit_channel_gpfifo(struct channel_gk20a *c, return -EINVAL; } - if (profile) - profile->timestamp[PROFILE_ENTRY] = nvgpu_current_time_ns(); + gk20a_fifo_profile_snapshot(profile, PROFILE_ENTRY); /* update debug settings */ nvgpu_ltc_sync_enabled(g); @@ -961,8 +959,7 @@ int gk20a_submit_channel_gpfifo(struct channel_gk20a *c, goto clean_up_job; } - if (profile) - profile->timestamp[PROFILE_JOB_TRACKING] = nvgpu_current_time_ns(); + gk20a_fifo_profile_snapshot(profile, PROFILE_JOB_TRACKING); if (wait_cmd) gk20a_submit_append_priv_cmdbuf(c, wait_cmd); @@ -986,8 +983,7 @@ int gk20a_submit_channel_gpfifo(struct channel_gk20a *c, if (need_job_tracking) /* TODO! Check for errors... */ gk20a_channel_add_job(c, job, skip_buffer_refcounting); - if (profile) - profile->timestamp[PROFILE_APPEND] = nvgpu_current_time_ns(); + gk20a_fifo_profile_snapshot(profile, PROFILE_APPEND); g->ops.fifo.userd_gp_put(g, c); @@ -1005,8 +1001,8 @@ int gk20a_submit_channel_gpfifo(struct channel_gk20a *c, nvgpu_log_info(g, "post-submit put %d, get %d, size %d", c->gpfifo.put, c->gpfifo.get, c->gpfifo.entry_num); - if (profile) - profile->timestamp[PROFILE_END] = nvgpu_current_time_ns(); + gk20a_fifo_profile_snapshot(profile, PROFILE_END); + nvgpu_log_fn(g, "done"); return err; diff --git a/drivers/gpu/nvgpu/common/linux/debug_fifo.c b/drivers/gpu/nvgpu/common/linux/debug_fifo.c index f2aaef58..2b5674c0 100644 --- a/drivers/gpu/nvgpu/common/linux/debug_fifo.c +++ b/drivers/gpu/nvgpu/common/linux/debug_fifo.c @@ -19,6 +19,7 @@ #include #include +#include void __gk20a_fifo_profile_free(struct nvgpu_ref *ref); @@ -325,6 +326,12 @@ void gk20a_fifo_debugfs_init(struct gk20a *g) } +void gk20a_fifo_profile_snapshot(struct fifo_profile_gk20a *profile, int idx) +{ + if (profile) + profile->timestamp[idx] = nvgpu_current_time_ns(); +} + void __gk20a_fifo_profile_free(struct nvgpu_ref *ref) { struct fifo_gk20a *f = container_of(ref, struct fifo_gk20a, diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_channel.c b/drivers/gpu/nvgpu/common/linux/ioctl_channel.c index f93412c3..b04bb9de 100644 --- a/drivers/gpu/nvgpu/common/linux/ioctl_channel.c +++ b/drivers/gpu/nvgpu/common/linux/ioctl_channel.c @@ -780,12 +780,9 @@ static int gk20a_ioctl_channel_submit_gpfifo( int ret = 0; nvgpu_log_fn(g, " "); -#ifdef CONFIG_DEBUG_FS profile = gk20a_fifo_profile_acquire(ch->g); + gk20a_fifo_profile_snapshot(profile, PROFILE_IOCTL_ENTRY); - if (profile) - profile->timestamp[PROFILE_IOCTL_ENTRY] = nvgpu_current_time_ns(); -#endif if (ch->has_timedout) return -ETIMEDOUT; @@ -825,12 +822,11 @@ static int gk20a_ioctl_channel_submit_gpfifo( } } gk20a_fence_put(fence_out); -#ifdef CONFIG_DEBUG_FS - if (profile) { - profile->timestamp[PROFILE_IOCTL_EXIT] = nvgpu_current_time_ns(); + + gk20a_fifo_profile_snapshot(profile, PROFILE_IOCTL_EXIT); + if (profile) gk20a_fifo_profile_release(ch->g, profile); - } -#endif + clean_up: return ret; } diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h index cf3ac167..bccd15f6 100644 --- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h @@ -349,6 +349,21 @@ bool gk20a_is_fault_engine_subid_gpc(struct gk20a *g, u32 engine_subid); struct fifo_profile_gk20a *gk20a_fifo_profile_acquire(struct gk20a *g); void gk20a_fifo_profile_release(struct gk20a *g, struct fifo_profile_gk20a *profile); +void gk20a_fifo_profile_snapshot(struct fifo_profile_gk20a *profile, int idx); +#else +static inline struct fifo_profile_gk20a * +gk20a_fifo_profile_acquire(struct gk20a *g) +{ + return NULL; +} +static inline void gk20a_fifo_profile_release(struct gk20a *g, + struct fifo_profile_gk20a *profile) +{ +} +static inline void gk20a_fifo_profile_snapshot( + struct fifo_profile_gk20a *profile, int idx) +{ +} #endif void gk20a_dump_channel_status_ramfc(struct gk20a *g, -- cgit v1.2.2