diff --git a/drivers/gpu/nvgpu/Makefile b/drivers/gpu/nvgpu/Makefile index ed4419cde..bb7de80dd 100644 --- a/drivers/gpu/nvgpu/Makefile +++ b/drivers/gpu/nvgpu/Makefile @@ -267,7 +267,7 @@ nvgpu-$(CONFIG_DEBUG_FS) += \ endif nvgpu-$(CONFIG_GK20A_CTXSW_TRACE) += \ - os/linux/ctxsw_trace.o + os/linux/fecs_trace_linux.o ifeq ($(CONFIG_GK20A_CTXSW_TRACE),y) nvgpu-$(CONFIG_DEBUG_FS) += \ diff --git a/drivers/gpu/nvgpu/common/fifo/channel.c b/drivers/gpu/nvgpu/common/fifo/channel.c index b85bff6ff..ad1f0ecba 100644 --- a/drivers/gpu/nvgpu/common/fifo/channel.c +++ b/drivers/gpu/nvgpu/common/fifo/channel.c @@ -39,7 +39,6 @@ #include #include #include -#include #include #include #include diff --git a/drivers/gpu/nvgpu/common/gr/fecs_trace/fecs_trace.c b/drivers/gpu/nvgpu/common/gr/fecs_trace/fecs_trace.c index 06790ecf2..68f1b158e 100644 --- a/drivers/gpu/nvgpu/common/gr/fecs_trace/fecs_trace.c +++ b/drivers/gpu/nvgpu/common/gr/fecs_trace/fecs_trace.c @@ -31,7 +31,6 @@ #include #include #include -#include #ifdef CONFIG_GK20A_CTXSW_TRACE diff --git a/drivers/gpu/nvgpu/common/vgpu/fecs_trace_vgpu.c b/drivers/gpu/nvgpu/common/vgpu/fecs_trace_vgpu.c index 34e5b17c3..525cccc2c 100644 --- a/drivers/gpu/nvgpu/common/vgpu/fecs_trace_vgpu.c +++ b/drivers/gpu/nvgpu/common/vgpu/fecs_trace_vgpu.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include #include diff --git a/drivers/gpu/nvgpu/common/vgpu/vgpu.c b/drivers/gpu/nvgpu/common/vgpu/vgpu.c index cd312476d..5d8df3fc2 100644 --- a/drivers/gpu/nvgpu/common/vgpu/vgpu.c +++ b/drivers/gpu/nvgpu/common/vgpu/vgpu.c @@ -30,7 +30,6 @@ #include #include #include -#include #include "fecs_trace_vgpu.h" diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c index 35fc86d55..f4af9eb51 100644 --- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c @@ -38,7 +38,6 @@ #include #include #include -#include #include #include #include @@ -58,6 +57,7 @@ #include #include #include +#include #include "mm_gk20a.h" diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c index 632f7a589..ce0e27b1f 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c @@ -36,7 +36,6 @@ #include #include #include -#include #include #include #include diff --git a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c index dc3c5b7e2..a07c3171e 100644 --- a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c +++ b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include diff --git a/drivers/gpu/nvgpu/gv100/hal_gv100.c b/drivers/gpu/nvgpu/gv100/hal_gv100.c index 78d7679eb..4659af58a 100644 --- a/drivers/gpu/nvgpu/gv100/hal_gv100.c +++ b/drivers/gpu/nvgpu/gv100/hal_gv100.c @@ -132,7 +132,6 @@ #include #include #include -#include #include #include #include diff --git a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c index a1a4c1a55..6294e7100 100644 --- a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c @@ -35,7 +35,6 @@ #include #include #include -#include #include #include #include @@ -51,6 +50,7 @@ #include #include #include +#include #include "gk20a/fifo_gk20a.h" diff --git a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c index c13539346..beee5e3d8 100644 --- a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c @@ -110,7 +110,6 @@ #include #include #include -#include #include #include #include diff --git a/drivers/gpu/nvgpu/include/nvgpu/gr/fecs_trace.h b/drivers/gpu/nvgpu/include/nvgpu/gr/fecs_trace.h index 4ec5c6ec5..0df5834be 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/gr/fecs_trace.h +++ b/drivers/gpu/nvgpu/include/nvgpu/gr/fecs_trace.h @@ -60,6 +60,8 @@ struct gk20a; struct nvgpu_mem; struct nvgpu_gr_subctx; struct nvgpu_gr_ctx; +struct tsg_gk20a; +struct vm_area_struct; struct nvgpu_gr_fecs_trace { struct nvgpu_list_node context_list; @@ -82,6 +84,33 @@ struct nvgpu_fecs_trace_record { u64 ts[]; }; +/* must be consistent with nvgpu_ctxsw_ring_header */ +struct nvgpu_ctxsw_ring_header_internal { + u32 magic; + u32 version; + u32 num_ents; + u32 ent_size; + u32 drop_count; /* excluding filtered out events */ + u32 write_seqno; + u32 write_idx; + u32 read_idx; +}; + +/* + * The binary format of 'struct nvgpu_gpu_ctxsw_trace_entry' introduced here + * should match that of 'struct nvgpu_ctxsw_trace_entry' defined in uapi + * header, since this struct is intended to be a mirror copy of the uapi + * struct. + */ +struct nvgpu_gpu_ctxsw_trace_entry { + u8 tag; + u8 vmid; + u16 seqno; /* sequence number to detect drops */ + u32 context_id; /* context_id as allocated by FECS */ + u64 pid; /* 64-bit is max bits of different OS pid */ + u64 timestamp; /* 64-bit time */ +}; + struct nvgpu_gpu_ctxsw_trace_filter { u64 tag_bits[(NVGPU_GPU_CTXSW_FILTER_SIZE + 63) / 64]; }; @@ -141,4 +170,17 @@ int nvgpu_gr_fecs_trace_bind_channel(struct gk20a *g, int nvgpu_gr_fecs_trace_unbind_channel(struct gk20a *g, struct nvgpu_mem *inst_block); +/* + * Below functions are defined in OS-specific code. + * Declare them here in common header since they are called from common code + */ +int gk20a_ctxsw_dev_ring_alloc(struct gk20a *g, void **buf, size_t *size); +int gk20a_ctxsw_dev_ring_free(struct gk20a *g); +int gk20a_ctxsw_dev_mmap_buffer(struct gk20a *g, struct vm_area_struct *vma); +void gk20a_ctxsw_trace_tsg_reset(struct gk20a *g, struct tsg_gk20a *tsg); +u8 nvgpu_gpu_ctxsw_tags_to_common_tags(u8 tags); +int gk20a_ctxsw_trace_write(struct gk20a *g, + struct nvgpu_gpu_ctxsw_trace_entry *entry); +void gk20a_ctxsw_trace_wake_up(struct gk20a *g, int vmid); + #endif /* NVGPU_GR_FECS_TRACE_H */ diff --git a/drivers/gpu/nvgpu/os/linux/ctxsw_trace.h b/drivers/gpu/nvgpu/os/linux/ctxsw_trace.h deleted file mode 100644 index 88ca7f25d..000000000 --- a/drivers/gpu/nvgpu/os/linux/ctxsw_trace.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef __CTXSW_TRACE_H__ -#define __CTXSW_TRACE_H__ - -#include - -#define GK20A_CTXSW_TRACE_NUM_DEVS 1 - -struct file; -struct inode; -struct poll_table_struct; - -struct gk20a; - -int gk20a_ctxsw_dev_release(struct inode *inode, struct file *filp); -int gk20a_ctxsw_dev_open(struct inode *inode, struct file *filp); -long gk20a_ctxsw_dev_ioctl(struct file *filp, - unsigned int cmd, unsigned long arg); -ssize_t gk20a_ctxsw_dev_read(struct file *filp, char __user *buf, - size_t size, loff_t *offs); -unsigned int gk20a_ctxsw_dev_poll(struct file *filp, - struct poll_table_struct *pts); - -#endif /* __CTXSW_TRACE_H__ */ diff --git a/drivers/gpu/nvgpu/os/linux/ctxsw_trace.c b/drivers/gpu/nvgpu/os/linux/fecs_trace_linux.c similarity index 97% rename from drivers/gpu/nvgpu/os/linux/ctxsw_trace.c rename to drivers/gpu/nvgpu/os/linux/fecs_trace_linux.c index 1abcb77ec..ba787a0b7 100644 --- a/drivers/gpu/nvgpu/os/linux/ctxsw_trace.c +++ b/drivers/gpu/nvgpu/os/linux/fecs_trace_linux.c @@ -20,7 +20,6 @@ #include #include #include -#include #include #include #include @@ -34,7 +33,7 @@ #include "platform_gk20a.h" #include "os_linux.h" -#include "ctxsw_trace.h" +#include "fecs_trace_linux.h" #include @@ -77,8 +76,9 @@ static inline int ring_len(struct nvgpu_ctxsw_ring_header *hdr) return (hdr->write_idx - hdr->read_idx) % hdr->num_ents; } -static void nvgpu_set_ctxsw_trace_entry(struct nvgpu_ctxsw_trace_entry *entry_dst, - struct nvgpu_gpu_ctxsw_trace_entry *entry_src) +static void nvgpu_set_ctxsw_trace_entry( + struct nvgpu_ctxsw_trace_entry *entry_dst, + struct nvgpu_gpu_ctxsw_trace_entry *entry_src) { entry_dst->tag = entry_src->tag; entry_dst->vmid = entry_src->vmid; @@ -119,7 +119,8 @@ ssize_t gk20a_ctxsw_dev_read(struct file *filp, char __user *buf, size_t size, if (ring_is_empty(hdr)) break; - nvgpu_set_ctxsw_trace_entry(&user_entry, &dev->ents[hdr->read_idx]); + nvgpu_set_ctxsw_trace_entry(&user_entry, + &dev->ents[hdr->read_idx]); if (copy_to_user(entry, &user_entry, sizeof(*entry))) { nvgpu_mutex_release(&dev->write_lock); @@ -250,14 +251,16 @@ 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) +static void nvgpu_set_ctxsw_trace_filter_args( + struct nvgpu_gpu_ctxsw_trace_filter *filter_dst, + struct nvgpu_ctxsw_trace_filter *filter_src) { nvgpu_memcpy((u8 *)filter_dst->tag_bits, (u8 *)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, +static void nvgpu_get_ctxsw_trace_filter_args( + struct nvgpu_ctxsw_trace_filter *filter_dst, struct nvgpu_gpu_ctxsw_trace_filter *filter_src) { nvgpu_memcpy((u8 *)filter_dst->tag_bits, (u8 *)filter_src->tag_bits, diff --git a/drivers/gpu/nvgpu/include/nvgpu/ctxsw_trace.h b/drivers/gpu/nvgpu/os/linux/fecs_trace_linux.h similarity index 50% rename from drivers/gpu/nvgpu/include/nvgpu/ctxsw_trace.h rename to drivers/gpu/nvgpu/os/linux/fecs_trace_linux.h index 937d777d6..39f393933 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/ctxsw_trace.h +++ b/drivers/gpu/nvgpu/os/linux/fecs_trace_linux.h @@ -20,61 +20,33 @@ * DEALINGS IN THE SOFTWARE. */ -#ifndef NVGPU_CTXSW_TRACE_H -#define NVGPU_CTXSW_TRACE_H +#ifndef NVGPU_FECS_TRACE_LINUX_H +#define NVGPU_FECS_TRACE_LINUX_H #include +#define GK20A_CTXSW_TRACE_NUM_DEVS 1 + +struct file; +struct inode; struct gk20a; struct tsg_gk20a; struct channel_gk20a; - -/* must be consistent with nvgpu_ctxsw_ring_header */ -struct nvgpu_ctxsw_ring_header_internal { - u32 magic; - u32 version; - u32 num_ents; - u32 ent_size; - u32 drop_count; /* excluding filtered out events */ - u32 write_seqno; - u32 write_idx; - u32 read_idx; -}; - -/* - * The binary format of 'struct nvgpu_gpu_ctxsw_trace_entry' introduced here - * should match that of 'struct nvgpu_ctxsw_trace_entry' defined in uapi - * header, since this struct is intended to be a mirror copy of the uapi - * struct. - */ -struct nvgpu_gpu_ctxsw_trace_entry { - u8 tag; - u8 vmid; - u16 seqno; /* sequence number to detect drops */ - u32 context_id; /* context_id as allocated by FECS */ - u64 pid; /* 64-bit is max bits of different OS pid */ - u64 timestamp; /* 64-bit time */ -}; +struct vm_area_struct; +struct poll_table_struct; int gk20a_ctxsw_trace_init(struct gk20a *g); - -void gk20a_ctxsw_trace_tsg_reset(struct gk20a *g, struct tsg_gk20a *tsg); - void gk20a_ctxsw_trace_cleanup(struct gk20a *g); -int gk20a_ctxsw_trace_write(struct gk20a *g, - struct nvgpu_gpu_ctxsw_trace_entry *entry); -void gk20a_ctxsw_trace_wake_up(struct gk20a *g, int vmid); - -#ifdef CONFIG_GK20A_CTXSW_TRACE -struct file; -struct vm_area_struct; int gk20a_ctxsw_dev_mmap(struct file *filp, struct vm_area_struct *vma); -int gk20a_ctxsw_dev_ring_alloc(struct gk20a *g, void **buf, size_t *size); -int gk20a_ctxsw_dev_ring_free(struct gk20a *g); -int gk20a_ctxsw_dev_mmap_buffer(struct gk20a *g, struct vm_area_struct *vma); -#endif -u8 nvgpu_gpu_ctxsw_tags_to_common_tags(u8 tags); +int gk20a_ctxsw_dev_release(struct inode *inode, struct file *filp); +int gk20a_ctxsw_dev_open(struct inode *inode, struct file *filp); +long gk20a_ctxsw_dev_ioctl(struct file *filp, + unsigned int cmd, unsigned long arg); +ssize_t gk20a_ctxsw_dev_read(struct file *filp, char __user *buf, + size_t size, loff_t *offs); +unsigned int gk20a_ctxsw_dev_poll(struct file *filp, + struct poll_table_struct *pts); -#endif /*NVGPU_CTXSW_TRACE_H */ +#endif /*NVGPU_FECS_TRACE_LINUX_H */ diff --git a/drivers/gpu/nvgpu/os/linux/ioctl.c b/drivers/gpu/nvgpu/os/linux/ioctl.c index 961351b35..d716a9007 100644 --- a/drivers/gpu/nvgpu/os/linux/ioctl.c +++ b/drivers/gpu/nvgpu/os/linux/ioctl.c @@ -1,7 +1,7 @@ /* * NVGPU IOCTLs * - * Copyright (c) 2011-2018, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2011-2019, NVIDIA CORPORATION. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -19,7 +19,6 @@ #include #include -#include #include #include "ioctl_channel.h" @@ -29,7 +28,7 @@ #include "ioctl_dbg.h" #include "module.h" #include "os_linux.h" -#include "ctxsw_trace.h" +#include "fecs_trace_linux.h" #include "platform_gk20a.h" #define GK20A_NUM_CDEVS 7 diff --git a/drivers/gpu/nvgpu/os/linux/ioctl_channel.c b/drivers/gpu/nvgpu/os/linux/ioctl_channel.c index 6b9598830..687d5d015 100644 --- a/drivers/gpu/nvgpu/os/linux/ioctl_channel.c +++ b/drivers/gpu/nvgpu/os/linux/ioctl_channel.c @@ -47,7 +47,6 @@ #include "ioctl_channel.h" #include "channel.h" #include "os_linux.h" -#include "ctxsw_trace.h" /* the minimal size of client buffer */ #define CSS_MIN_CLIENT_SNAPSHOT_SIZE \ diff --git a/drivers/gpu/nvgpu/os/linux/module.c b/drivers/gpu/nvgpu/os/linux/module.c index 89634e69b..4a7b9a524 100644 --- a/drivers/gpu/nvgpu/os/linux/module.c +++ b/drivers/gpu/nvgpu/os/linux/module.c @@ -42,7 +42,6 @@ #include #include #include -#include #include #include #include @@ -63,7 +62,7 @@ #include "os_linux.h" #include "os_ops.h" -#include "ctxsw_trace.h" +#include "fecs_trace_linux.h" #include "driver_common.h" #include "channel.h" #include "debug_pmgr.h" diff --git a/drivers/gpu/nvgpu/os/linux/vgpu/fecs_trace_vgpu_linux.c b/drivers/gpu/nvgpu/os/linux/vgpu/fecs_trace_vgpu_linux.c index 0c612576a..bc85a7ca5 100644 --- a/drivers/gpu/nvgpu/os/linux/vgpu/fecs_trace_vgpu_linux.c +++ b/drivers/gpu/nvgpu/os/linux/vgpu/fecs_trace_vgpu_linux.c @@ -14,10 +14,10 @@ * along with this program. If not, see . */ -#include #include #include #include +#include #include diff --git a/drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c b/drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c index 4ca043a52..cab428c9c 100644 --- a/drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c +++ b/drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c @@ -29,7 +29,6 @@ #include #include #include -#include #include #include #include diff --git a/drivers/gpu/nvgpu/tu104/hal_tu104.c b/drivers/gpu/nvgpu/tu104/hal_tu104.c index e6ac97df7..6f9d8a8e1 100644 --- a/drivers/gpu/nvgpu/tu104/hal_tu104.c +++ b/drivers/gpu/nvgpu/tu104/hal_tu104.c @@ -147,7 +147,6 @@ #include #include #include -#include #include #include #include