summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVaibhav Kachore <vkachore@nvidia.com>2018-08-20 07:29:45 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-08-31 15:16:19 -0400
commit7bf80a1c69a07f81225270e90a57a1c41d202859 (patch)
tree278ed4c9197997734bac69b5695a559ec5278082
parent064ba6a7ef236a7bb1085715c6ab37810f230bbf (diff)
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 <vkachore@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1803210 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
-rw-r--r--drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.c5
-rw-r--r--drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.h4
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h6
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/ctxsw_trace.h9
-rw-r--r--drivers/gpu/nvgpu/os/linux/ctxsw_trace.c20
-rw-r--r--drivers/gpu/nvgpu/os/linux/vgpu/fecs_trace_vgpu.c4
-rw-r--r--drivers/gpu/nvgpu/vgpu/fecs_trace_vgpu.h6
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 @@
23#ifdef CONFIG_DEBUG_FS 23#ifdef CONFIG_DEBUG_FS
24#include <linux/debugfs.h> 24#include <linux/debugfs.h>
25#endif 25#endif
26#include <uapi/linux/nvgpu.h>
27 26
28#include <nvgpu/kmem.h> 27#include <nvgpu/kmem.h>
29#include <nvgpu/dma.h> 28#include <nvgpu/dma.h>
@@ -738,14 +737,14 @@ int gk20a_fecs_trace_deinit(struct gk20a *g)
738} 737}
739 738
740int gk20a_gr_max_entries(struct gk20a *g, 739int gk20a_gr_max_entries(struct gk20a *g,
741 struct nvgpu_ctxsw_trace_filter *filter) 740 struct nvgpu_gpu_ctxsw_trace_filter *filter)
742{ 741{
743 int n; 742 int n;
744 int tag; 743 int tag;
745 744
746 /* Compute number of entries per record, with given filter */ 745 /* Compute number of entries per record, with given filter */
747 for (n = 0, tag = 0; tag < gk20a_fecs_trace_num_ts(); tag++) 746 for (n = 0, tag = 0; tag < gk20a_fecs_trace_num_ts(); tag++)
748 n += (NVGPU_CTXSW_FILTER_ISSET(tag, filter) != 0); 747 n += (NVGPU_GPU_CTXSW_FILTER_ISSET(tag, filter) != 0);
749 748
750 /* Return max number of entries generated for the whole ring */ 749 /* Return max number of entries generated for the whole ring */
751 return n * GK20A_FECS_TRACE_NUM_RECORDS; 750 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 @@
25 25
26struct gk20a; 26struct gk20a;
27struct channel_gk20a; 27struct channel_gk20a;
28struct nvgpu_ctxsw_trace_filter; 28struct nvgpu_gpu_ctxsw_trace_filter;
29 29
30int gk20a_fecs_trace_poll(struct gk20a *g); 30int gk20a_fecs_trace_poll(struct gk20a *g);
31int gk20a_fecs_trace_init(struct gk20a *g); 31int gk20a_fecs_trace_init(struct gk20a *g);
@@ -35,7 +35,7 @@ int gk20a_fecs_trace_unbind_channel(struct gk20a *g, struct channel_gk20a *ch);
35int gk20a_fecs_trace_reset(struct gk20a *g); 35int gk20a_fecs_trace_reset(struct gk20a *g);
36int gk20a_fecs_trace_deinit(struct gk20a *g); 36int gk20a_fecs_trace_deinit(struct gk20a *g);
37int gk20a_gr_max_entries(struct gk20a *g, 37int gk20a_gr_max_entries(struct gk20a *g,
38 struct nvgpu_ctxsw_trace_filter *filter); 38 struct nvgpu_gpu_ctxsw_trace_filter *filter);
39int gk20a_fecs_trace_enable(struct gk20a *g); 39int gk20a_fecs_trace_enable(struct gk20a *g);
40int gk20a_fecs_trace_disable(struct gk20a *g); 40int gk20a_fecs_trace_disable(struct gk20a *g);
41bool gk20a_fecs_trace_is_enabled(struct gk20a *g); 41bool 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;
43struct nvgpu_warpstate; 43struct nvgpu_warpstate;
44struct nvgpu_clk_arb; 44struct nvgpu_clk_arb;
45#ifdef CONFIG_GK20A_CTXSW_TRACE 45#ifdef CONFIG_GK20A_CTXSW_TRACE
46struct nvgpu_ctxsw_trace_filter; 46struct nvgpu_gpu_ctxsw_trace_filter;
47#endif 47#endif
48struct priv_cmd_entry; 48struct priv_cmd_entry;
49 49
@@ -894,7 +894,7 @@ struct gpu_ops {
894 struct { 894 struct {
895 int (*init)(struct gk20a *g); 895 int (*init)(struct gk20a *g);
896 int (*max_entries)(struct gk20a *, 896 int (*max_entries)(struct gk20a *,
897 struct nvgpu_ctxsw_trace_filter *filter); 897 struct nvgpu_gpu_ctxsw_trace_filter *filter);
898 int (*flush)(struct gk20a *g); 898 int (*flush)(struct gk20a *g);
899 int (*poll)(struct gk20a *g); 899 int (*poll)(struct gk20a *g);
900 int (*enable)(struct gk20a *g); 900 int (*enable)(struct gk20a *g);
@@ -911,7 +911,7 @@ struct gpu_ops {
911 int (*mmap_user_buffer)(struct gk20a *g, 911 int (*mmap_user_buffer)(struct gk20a *g,
912 struct vm_area_struct *vma); 912 struct vm_area_struct *vma);
913 int (*set_filter)(struct gk20a *g, 913 int (*set_filter)(struct gk20a *g,
914 struct nvgpu_ctxsw_trace_filter *filter); 914 struct nvgpu_gpu_ctxsw_trace_filter *filter);
915 } fecs_trace; 915 } fecs_trace;
916#endif 916#endif
917 struct { 917 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;
44#define NVGPU_GPU_CTXSW_TAG_LAST \ 44#define NVGPU_GPU_CTXSW_TAG_LAST \
45 NVGPU_GPU_CTXSW_TAG_INVALID_TIMESTAMP 45 NVGPU_GPU_CTXSW_TAG_INVALID_TIMESTAMP
46 46
47#define NVGPU_GPU_CTXSW_FILTER_ISSET(n, p) \
48 ((p)->tag_bits[(n) / 64] & (1 << ((n) & 63)))
49
50#define NVGPU_GPU_CTXSW_FILTER_SIZE (NVGPU_GPU_CTXSW_TAG_LAST + 1)
51
52struct nvgpu_gpu_ctxsw_trace_filter {
53 u64 tag_bits[(NVGPU_GPU_CTXSW_FILTER_SIZE + 63) / 64];
54};
55
47/* 56/*
48 * The binary format of 'struct nvgpu_gpu_ctxsw_trace_entry' introduced here 57 * The binary format of 'struct nvgpu_gpu_ctxsw_trace_entry' introduced here
49 * should match that of 'struct nvgpu_ctxsw_trace_entry' defined in uapi 58 * 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 {
46 46
47 struct nvgpu_ctxsw_ring_header *hdr; 47 struct nvgpu_ctxsw_ring_header *hdr;
48 struct nvgpu_gpu_ctxsw_trace_entry *ents; 48 struct nvgpu_gpu_ctxsw_trace_entry *ents;
49 struct nvgpu_ctxsw_trace_filter filter; 49 struct nvgpu_gpu_ctxsw_trace_filter filter;
50 bool write_enabled; 50 bool write_enabled;
51 struct nvgpu_cond readout_wq; 51 struct nvgpu_cond readout_wq;
52 size_t size; 52 size_t size;
@@ -244,13 +244,25 @@ static int gk20a_ctxsw_dev_ioctl_ring_setup(struct gk20a_ctxsw_dev *dev,
244 return ret; 244 return ret;
245} 245}
246 246
247static void nvgpu_set_ctxsw_trace_filter_args(struct nvgpu_gpu_ctxsw_trace_filter *filter_dst,
248 struct nvgpu_ctxsw_trace_filter *filter_src)
249{
250 memcpy(filter_dst->tag_bits, filter_src->tag_bits, (NVGPU_CTXSW_FILTER_SIZE + 63) / 64);
251}
252
253static void nvgpu_get_ctxsw_trace_filter_args(struct nvgpu_ctxsw_trace_filter *filter_dst,
254 struct nvgpu_gpu_ctxsw_trace_filter *filter_src)
255{
256 memcpy(filter_dst->tag_bits, filter_src->tag_bits, (NVGPU_CTXSW_FILTER_SIZE + 63) / 64);
257}
258
247static int gk20a_ctxsw_dev_ioctl_set_filter(struct gk20a_ctxsw_dev *dev, 259static int gk20a_ctxsw_dev_ioctl_set_filter(struct gk20a_ctxsw_dev *dev,
248 struct nvgpu_ctxsw_trace_filter_args *args) 260 struct nvgpu_ctxsw_trace_filter_args *args)
249{ 261{
250 struct gk20a *g = dev->g; 262 struct gk20a *g = dev->g;
251 263
252 nvgpu_mutex_acquire(&dev->write_lock); 264 nvgpu_mutex_acquire(&dev->write_lock);
253 dev->filter = args->filter; 265 nvgpu_set_ctxsw_trace_filter_args(&dev->filter, &args->filter);
254 nvgpu_mutex_release(&dev->write_lock); 266 nvgpu_mutex_release(&dev->write_lock);
255 267
256 if (g->ops.fecs_trace.set_filter) 268 if (g->ops.fecs_trace.set_filter)
@@ -262,7 +274,7 @@ static int gk20a_ctxsw_dev_ioctl_get_filter(struct gk20a_ctxsw_dev *dev,
262 struct nvgpu_ctxsw_trace_filter_args *args) 274 struct nvgpu_ctxsw_trace_filter_args *args)
263{ 275{
264 nvgpu_mutex_acquire(&dev->write_lock); 276 nvgpu_mutex_acquire(&dev->write_lock);
265 args->filter = dev->filter; 277 nvgpu_get_ctxsw_trace_filter_args(&args->filter, &dev->filter);
266 nvgpu_mutex_release(&dev->write_lock); 278 nvgpu_mutex_release(&dev->write_lock);
267 279
268 return 0; 280 return 0;
@@ -650,7 +662,7 @@ int gk20a_ctxsw_trace_write(struct gk20a *g,
650 goto drop; 662 goto drop;
651 } 663 }
652 664
653 if (!NVGPU_CTXSW_FILTER_ISSET(entry->tag, &dev->filter)) { 665 if (!NVGPU_GPU_CTXSW_FILTER_ISSET(entry->tag, &dev->filter)) {
654 reason = "filtered out"; 666 reason = "filtered out";
655 goto filter; 667 goto filter;
656 } 668 }
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)
190 190
191#ifdef CONFIG_GK20A_CTXSW_TRACE 191#ifdef CONFIG_GK20A_CTXSW_TRACE
192int vgpu_fecs_trace_max_entries(struct gk20a *g, 192int vgpu_fecs_trace_max_entries(struct gk20a *g,
193 struct nvgpu_ctxsw_trace_filter *filter) 193 struct nvgpu_gpu_ctxsw_trace_filter *filter)
194{ 194{
195 struct vgpu_fecs_trace *vcst = (struct vgpu_fecs_trace *)g->fecs_trace; 195 struct vgpu_fecs_trace *vcst = (struct vgpu_fecs_trace *)g->fecs_trace;
196 196
@@ -202,7 +202,7 @@ int vgpu_fecs_trace_max_entries(struct gk20a *g,
202#endif 202#endif
203 203
204int vgpu_fecs_trace_set_filter(struct gk20a *g, 204int vgpu_fecs_trace_set_filter(struct gk20a *g,
205 struct nvgpu_ctxsw_trace_filter *filter) 205 struct nvgpu_gpu_ctxsw_trace_filter *filter)
206{ 206{
207 struct tegra_vgpu_cmd_msg msg = { 207 struct tegra_vgpu_cmd_msg msg = {
208 .cmd = TEGRA_VGPU_CMD_FECS_TRACE_SET_FILTER, 208 .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 @@
27 27
28struct gk20a; 28struct gk20a;
29struct vm_area_struct; 29struct vm_area_struct;
30struct nvgpu_ctxsw_trace_filter; 30struct nvgpu_gpu_ctxsw_trace_filter;
31 31
32void vgpu_fecs_trace_data_update(struct gk20a *g); 32void vgpu_fecs_trace_data_update(struct gk20a *g);
33int vgpu_fecs_trace_init(struct gk20a *g); 33int vgpu_fecs_trace_init(struct gk20a *g);
@@ -40,8 +40,8 @@ int vgpu_alloc_user_buffer(struct gk20a *g, void **buf, size_t *size);
40int vgpu_free_user_buffer(struct gk20a *g); 40int vgpu_free_user_buffer(struct gk20a *g);
41int vgpu_mmap_user_buffer(struct gk20a *g, struct vm_area_struct *vma); 41int vgpu_mmap_user_buffer(struct gk20a *g, struct vm_area_struct *vma);
42int vgpu_fecs_trace_max_entries(struct gk20a *g, 42int vgpu_fecs_trace_max_entries(struct gk20a *g,
43 struct nvgpu_ctxsw_trace_filter *filter); 43 struct nvgpu_gpu_ctxsw_trace_filter *filter);
44int vgpu_fecs_trace_set_filter(struct gk20a *g, 44int vgpu_fecs_trace_set_filter(struct gk20a *g,
45 struct nvgpu_ctxsw_trace_filter *filter); 45 struct nvgpu_gpu_ctxsw_trace_filter *filter);
46 46
47#endif /* __FECS_TRACE_VGPU_H */ 47#endif /* __FECS_TRACE_VGPU_H */