From 7bf80a1c69a07f81225270e90a57a1c41d202859 Mon Sep 17 00:00:00 2001 From: Vaibhav Kachore Date: Mon, 20 Aug 2018 16:59:45 +0530 Subject: gpu: nvgpu: remove use of NVGPU_CTXSW_FILTER_ISSET - Remove the usage of NVGPU_CTXSW_FILTER_ISSET splattered across nvgpu, and replace with a MACRO defined in common code. The usage is still inside Linux, but this helps the subsequent unification efforts, e.g. to unify the fecs trace path. - Remove "uapi/linux/nvgpu.h" from common code. EVLR-3078 Change-Id: I60b0e1627576a4b255671d58530d8c773ea6154c Signed-off-by: Vaibhav Kachore Reviewed-on: https://git-master.nvidia.com/r/1803210 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.c | 5 ++--- drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.h | 4 ++-- drivers/gpu/nvgpu/gk20a/gk20a.h | 6 +++--- drivers/gpu/nvgpu/include/nvgpu/ctxsw_trace.h | 9 +++++++++ drivers/gpu/nvgpu/os/linux/ctxsw_trace.c | 20 ++++++++++++++++---- drivers/gpu/nvgpu/os/linux/vgpu/fecs_trace_vgpu.c | 4 ++-- drivers/gpu/nvgpu/vgpu/fecs_trace_vgpu.h | 6 +++--- 7 files changed, 37 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.c b/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.c index e775c10b..453d5b2f 100644 --- a/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.c @@ -23,7 +23,6 @@ #ifdef CONFIG_DEBUG_FS #include #endif -#include #include #include @@ -738,14 +737,14 @@ int gk20a_fecs_trace_deinit(struct gk20a *g) } int gk20a_gr_max_entries(struct gk20a *g, - struct nvgpu_ctxsw_trace_filter *filter) + struct nvgpu_gpu_ctxsw_trace_filter *filter) { int n; int tag; /* Compute number of entries per record, with given filter */ for (n = 0, tag = 0; tag < gk20a_fecs_trace_num_ts(); tag++) - n += (NVGPU_CTXSW_FILTER_ISSET(tag, filter) != 0); + n += (NVGPU_GPU_CTXSW_FILTER_ISSET(tag, filter) != 0); /* Return max number of entries generated for the whole ring */ return n * GK20A_FECS_TRACE_NUM_RECORDS; diff --git a/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.h b/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.h index acac14c6..8e723107 100644 --- a/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.h @@ -25,7 +25,7 @@ struct gk20a; struct channel_gk20a; -struct nvgpu_ctxsw_trace_filter; +struct nvgpu_gpu_ctxsw_trace_filter; int gk20a_fecs_trace_poll(struct gk20a *g); int gk20a_fecs_trace_init(struct gk20a *g); @@ -35,7 +35,7 @@ int gk20a_fecs_trace_unbind_channel(struct gk20a *g, struct channel_gk20a *ch); int gk20a_fecs_trace_reset(struct gk20a *g); int gk20a_fecs_trace_deinit(struct gk20a *g); int gk20a_gr_max_entries(struct gk20a *g, - struct nvgpu_ctxsw_trace_filter *filter); + struct nvgpu_gpu_ctxsw_trace_filter *filter); int gk20a_fecs_trace_enable(struct gk20a *g); int gk20a_fecs_trace_disable(struct gk20a *g); bool gk20a_fecs_trace_is_enabled(struct gk20a *g); diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index 8fc88677..93a5bb23 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h @@ -43,7 +43,7 @@ struct nvgpu_mem_sgt; struct nvgpu_warpstate; struct nvgpu_clk_arb; #ifdef CONFIG_GK20A_CTXSW_TRACE -struct nvgpu_ctxsw_trace_filter; +struct nvgpu_gpu_ctxsw_trace_filter; #endif struct priv_cmd_entry; @@ -894,7 +894,7 @@ struct gpu_ops { struct { int (*init)(struct gk20a *g); int (*max_entries)(struct gk20a *, - struct nvgpu_ctxsw_trace_filter *filter); + struct nvgpu_gpu_ctxsw_trace_filter *filter); int (*flush)(struct gk20a *g); int (*poll)(struct gk20a *g); int (*enable)(struct gk20a *g); @@ -911,7 +911,7 @@ struct gpu_ops { int (*mmap_user_buffer)(struct gk20a *g, struct vm_area_struct *vma); int (*set_filter)(struct gk20a *g, - struct nvgpu_ctxsw_trace_filter *filter); + struct nvgpu_gpu_ctxsw_trace_filter *filter); } fecs_trace; #endif struct { diff --git a/drivers/gpu/nvgpu/include/nvgpu/ctxsw_trace.h b/drivers/gpu/nvgpu/include/nvgpu/ctxsw_trace.h index 9dd6833f..4eaf9bf0 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/ctxsw_trace.h +++ b/drivers/gpu/nvgpu/include/nvgpu/ctxsw_trace.h @@ -44,6 +44,15 @@ struct channel_gk20a; #define NVGPU_GPU_CTXSW_TAG_LAST \ NVGPU_GPU_CTXSW_TAG_INVALID_TIMESTAMP +#define NVGPU_GPU_CTXSW_FILTER_ISSET(n, p) \ + ((p)->tag_bits[(n) / 64] & (1 << ((n) & 63))) + +#define NVGPU_GPU_CTXSW_FILTER_SIZE (NVGPU_GPU_CTXSW_TAG_LAST + 1) + +struct nvgpu_gpu_ctxsw_trace_filter { + u64 tag_bits[(NVGPU_GPU_CTXSW_FILTER_SIZE + 63) / 64]; +}; + /* * The binary format of 'struct nvgpu_gpu_ctxsw_trace_entry' introduced here * should match that of 'struct nvgpu_ctxsw_trace_entry' defined in uapi diff --git a/drivers/gpu/nvgpu/os/linux/ctxsw_trace.c b/drivers/gpu/nvgpu/os/linux/ctxsw_trace.c index 4983061b..16b040da 100644 --- a/drivers/gpu/nvgpu/os/linux/ctxsw_trace.c +++ b/drivers/gpu/nvgpu/os/linux/ctxsw_trace.c @@ -46,7 +46,7 @@ struct gk20a_ctxsw_dev { struct nvgpu_ctxsw_ring_header *hdr; struct nvgpu_gpu_ctxsw_trace_entry *ents; - struct nvgpu_ctxsw_trace_filter filter; + struct nvgpu_gpu_ctxsw_trace_filter filter; bool write_enabled; struct nvgpu_cond readout_wq; size_t size; @@ -244,13 +244,25 @@ static int gk20a_ctxsw_dev_ioctl_ring_setup(struct gk20a_ctxsw_dev *dev, return ret; } +static void nvgpu_set_ctxsw_trace_filter_args(struct nvgpu_gpu_ctxsw_trace_filter *filter_dst, + struct nvgpu_ctxsw_trace_filter *filter_src) +{ + memcpy(filter_dst->tag_bits, filter_src->tag_bits, (NVGPU_CTXSW_FILTER_SIZE + 63) / 64); +} + +static void nvgpu_get_ctxsw_trace_filter_args(struct nvgpu_ctxsw_trace_filter *filter_dst, + struct nvgpu_gpu_ctxsw_trace_filter *filter_src) +{ + memcpy(filter_dst->tag_bits, filter_src->tag_bits, (NVGPU_CTXSW_FILTER_SIZE + 63) / 64); +} + static int gk20a_ctxsw_dev_ioctl_set_filter(struct gk20a_ctxsw_dev *dev, struct nvgpu_ctxsw_trace_filter_args *args) { struct gk20a *g = dev->g; nvgpu_mutex_acquire(&dev->write_lock); - dev->filter = args->filter; + nvgpu_set_ctxsw_trace_filter_args(&dev->filter, &args->filter); nvgpu_mutex_release(&dev->write_lock); if (g->ops.fecs_trace.set_filter) @@ -262,7 +274,7 @@ static int gk20a_ctxsw_dev_ioctl_get_filter(struct gk20a_ctxsw_dev *dev, struct nvgpu_ctxsw_trace_filter_args *args) { nvgpu_mutex_acquire(&dev->write_lock); - args->filter = dev->filter; + nvgpu_get_ctxsw_trace_filter_args(&args->filter, &dev->filter); nvgpu_mutex_release(&dev->write_lock); return 0; @@ -650,7 +662,7 @@ int gk20a_ctxsw_trace_write(struct gk20a *g, goto drop; } - if (!NVGPU_CTXSW_FILTER_ISSET(entry->tag, &dev->filter)) { + if (!NVGPU_GPU_CTXSW_FILTER_ISSET(entry->tag, &dev->filter)) { reason = "filtered out"; goto filter; } diff --git a/drivers/gpu/nvgpu/os/linux/vgpu/fecs_trace_vgpu.c b/drivers/gpu/nvgpu/os/linux/vgpu/fecs_trace_vgpu.c index 255ee2bd..c878316a 100644 --- a/drivers/gpu/nvgpu/os/linux/vgpu/fecs_trace_vgpu.c +++ b/drivers/gpu/nvgpu/os/linux/vgpu/fecs_trace_vgpu.c @@ -190,7 +190,7 @@ int vgpu_mmap_user_buffer(struct gk20a *g, struct vm_area_struct *vma) #ifdef CONFIG_GK20A_CTXSW_TRACE int vgpu_fecs_trace_max_entries(struct gk20a *g, - struct nvgpu_ctxsw_trace_filter *filter) + struct nvgpu_gpu_ctxsw_trace_filter *filter) { struct vgpu_fecs_trace *vcst = (struct vgpu_fecs_trace *)g->fecs_trace; @@ -202,7 +202,7 @@ int vgpu_fecs_trace_max_entries(struct gk20a *g, #endif int vgpu_fecs_trace_set_filter(struct gk20a *g, - struct nvgpu_ctxsw_trace_filter *filter) + struct nvgpu_gpu_ctxsw_trace_filter *filter) { struct tegra_vgpu_cmd_msg msg = { .cmd = TEGRA_VGPU_CMD_FECS_TRACE_SET_FILTER, diff --git a/drivers/gpu/nvgpu/vgpu/fecs_trace_vgpu.h b/drivers/gpu/nvgpu/vgpu/fecs_trace_vgpu.h index b957a363..496e1892 100644 --- a/drivers/gpu/nvgpu/vgpu/fecs_trace_vgpu.h +++ b/drivers/gpu/nvgpu/vgpu/fecs_trace_vgpu.h @@ -27,7 +27,7 @@ struct gk20a; struct vm_area_struct; -struct nvgpu_ctxsw_trace_filter; +struct nvgpu_gpu_ctxsw_trace_filter; void vgpu_fecs_trace_data_update(struct gk20a *g); int vgpu_fecs_trace_init(struct gk20a *g); @@ -40,8 +40,8 @@ int vgpu_alloc_user_buffer(struct gk20a *g, void **buf, size_t *size); int vgpu_free_user_buffer(struct gk20a *g); int vgpu_mmap_user_buffer(struct gk20a *g, struct vm_area_struct *vma); int vgpu_fecs_trace_max_entries(struct gk20a *g, - struct nvgpu_ctxsw_trace_filter *filter); + struct nvgpu_gpu_ctxsw_trace_filter *filter); int vgpu_fecs_trace_set_filter(struct gk20a *g, - struct nvgpu_ctxsw_trace_filter *filter); + struct nvgpu_gpu_ctxsw_trace_filter *filter); #endif /* __FECS_TRACE_VGPU_H */ -- cgit v1.2.2