[Freedreno] [DPU PATCH 13/19] drm/msm: dpu: Remove dpu evtlog
ryadav at codeaurora.org
ryadav at codeaurora.org
Tue Jun 26 06:52:46 UTC 2018
On 2018-06-21 02:18, Sean Paul wrote:
> Now that everything has been converted to tracepoints, remove the dpu
> evtlog.
>
> Signed-off-by: Sean Paul <seanpaul at chromium.org>
Reviewed-by: Rajesh Yadav <ryadav at codeaurora.org>
> ---
> drivers/gpu/drm/msm/Makefile | 1 -
> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 5 -
> drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h | 33 ---
> drivers/gpu/drm/msm/dpu_dbg.c | 147 +----------
> drivers/gpu/drm/msm/dpu_dbg.h | 224 +---------------
> drivers/gpu/drm/msm/dpu_dbg_evtlog.c | 306 ----------------------
> 6 files changed, 11 insertions(+), 705 deletions(-)
> delete mode 100644 drivers/gpu/drm/msm/dpu_dbg_evtlog.c
>
> diff --git a/drivers/gpu/drm/msm/Makefile
> b/drivers/gpu/drm/msm/Makefile
> index dc56904367d8..9c182a9dab2b 100644
> --- a/drivers/gpu/drm/msm/Makefile
> +++ b/drivers/gpu/drm/msm/Makefile
> @@ -75,7 +75,6 @@ msm-y := \
> disp/dpu1/dpu_mdss.o \
> disp/dpu1/dpu_power_handle.o \
> dpu_dbg.o \
> - dpu_dbg_evtlog.o \
> msm_prop.o \
> msm_atomic.o \
> msm_debugfs.o \
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> index 6ae5bba21074..4fd5e1d7261e 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> @@ -43,11 +43,6 @@ static const char * const iommu_ports[] = {
> "mdp_0",
> };
>
> -/**
> - * Controls size of event log buffer. Specified as a power of 2.
> - */
> -#define DPU_EVTLOG_SIZE 1024
> -
> /*
> * To enable overall DRM driver logging
> * # echo 0x2 > /sys/module/drm/parameters/debug
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h
> b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h
> index d6f117bdad24..41fd6a227d8b 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h
> @@ -165,39 +165,6 @@ TRACE_EVENT(dpu_trace_counter,
> __get_str(counter_name), __entry->value)
> )
>
> -#define DPU_TRACE_EVTLOG_SIZE 15
> -TRACE_EVENT(dpu_evtlog,
> - TP_PROTO(const char *tag, u32 tag_id, u32 cnt, u32 data[]),
> - TP_ARGS(tag, tag_id, cnt, data),
> - TP_STRUCT__entry(
> - __field(int, pid)
> - __string(evtlog_tag, tag)
> - __field(u32, tag_id)
> - __array(u32, data, DPU_TRACE_EVTLOG_SIZE)
> - ),
> - TP_fast_assign(
> - __entry->pid = current->tgid;
> - __assign_str(evtlog_tag, tag);
> - __entry->tag_id = tag_id;
> - if (cnt > DPU_TRACE_EVTLOG_SIZE)
> - cnt = DPU_TRACE_EVTLOG_SIZE;
> - memcpy(__entry->data, data, cnt * sizeof(u32));
> - memset(&__entry->data[cnt], 0,
> - (DPU_TRACE_EVTLOG_SIZE - cnt) * sizeof(u32));
> - ),
> - TP_printk("%d|%s:%d|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x|%x",
> - __entry->pid, __get_str(evtlog_tag),
> - __entry->tag_id,
> - __entry->data[0], __entry->data[1],
> - __entry->data[2], __entry->data[3],
> - __entry->data[4], __entry->data[5],
> - __entry->data[6], __entry->data[7],
> - __entry->data[8], __entry->data[9],
> - __entry->data[10], __entry->data[11],
> - __entry->data[12], __entry->data[13],
> - __entry->data[14])
> -)
> -
> TRACE_EVENT(dpu_perf_crtc_update,
> TP_PROTO(u32 crtc, u64 bw_ctl_mnoc, u64 bw_ctl_llcc,
> u64 bw_ctl_ebi, u32 core_clk_rate,
> diff --git a/drivers/gpu/drm/msm/dpu_dbg.c
> b/drivers/gpu/drm/msm/dpu_dbg.c
> index 27538bc6c290..9495a0f17f1b 100644
> --- a/drivers/gpu/drm/msm/dpu_dbg.c
> +++ b/drivers/gpu/drm/msm/dpu_dbg.c
> @@ -165,7 +165,6 @@ struct dpu_dbg_vbif_debug_bus {
>
> /**
> * struct dpu_dbg_base - global dpu debug base structure
> - * @evtlog: event log instance
> * @reg_base_list: list of register dumping regions
> * @dev: device pointer
> * @req_dump_blks: list of blocks requested for dumping
> @@ -179,7 +178,6 @@ struct dpu_dbg_vbif_debug_bus {
> * @dsi_dbg_bus: dump dsi debug bus register
> */
> static struct dpu_dbg_base {
> - struct dpu_dbg_evtlog *evtlog;
> struct list_head reg_base_list;
> struct device *dev;
>
> @@ -196,9 +194,6 @@ static struct dpu_dbg_base {
> bool dsi_dbg_bus;
> } dpu_dbg_base;
>
> -/* dpu_dbg_base_evtlog - global pointer to main dpu event log for
> macro use */
> -struct dpu_dbg_evtlog *dpu_dbg_base_evtlog;
> -
> static void _dpu_debug_bus_xbar_dump(void __iomem *mem_base,
> struct dpu_debug_bus_entry *entry, u32 val)
> {
> @@ -2526,8 +2521,6 @@ static void _dpu_dump_array(struct
> dpu_dbg_reg_base *blk_arr[],
> {
> int i;
>
> - dpu_evtlog_dump_all(dpu_dbg_base.evtlog);
> -
> if (dump_all || !blk_arr || !len) {
> _dpu_dump_reg_all();
> } else {
> @@ -2556,7 +2549,7 @@ static void _dpu_dump_work(struct work_struct
> *work)
> {
> _dpu_dump_array(dpu_dbg_base.req_dump_blks,
> ARRAY_SIZE(dpu_dbg_base.req_dump_blks),
> - dpu_dbg_base.work_panic, "evtlog_workitem",
> + dpu_dbg_base.work_panic, "dpudump_workitem",
> dpu_dbg_base.dbgbus_dpu.cmn.include_in_deferred_work,
> dpu_dbg_base.dbgbus_vbif_rt.cmn.include_in_deferred_work,
> dpu_dbg_base.dump_all);
> @@ -2564,7 +2557,7 @@ static void _dpu_dump_work(struct work_struct
> *work)
>
> void dpu_dbg_dump(bool queue_work, const char *name, ...)
> {
> - int i, index = 0;
> + int index = 0;
> bool do_panic = false;
> bool dump_dbgbus_dpu = false;
> bool dump_dbgbus_vbif_rt = false;
> @@ -2575,9 +2568,6 @@ void dpu_dbg_dump(bool queue_work, const char
> *name, ...)
> struct dpu_dbg_reg_base **blk_arr;
> u32 blk_len;
>
> - if (!dpu_evtlog_is_enabled(dpu_dbg_base.evtlog, DPU_EVTLOG_ALWAYS))
> - return;
> -
> if (queue_work && work_pending(&dpu_dbg_base.dump_work))
> return;
>
> @@ -2589,12 +2579,7 @@ void dpu_dbg_dump(bool queue_work, const char
> *name, ...)
> dpu_dbg_base.dump_all = false;
>
> va_start(args, name);
> - i = 0;
> while ((blk_name = va_arg(args, char*))) {
> - if (i++ >= DPU_EVTLOG_MAX_DATA) {
> - pr_err("could not parse all dump arguments\n");
> - break;
> - }
> if (IS_ERR_OR_NULL(blk_name))
> break;
>
> @@ -2641,7 +2626,7 @@ void dpu_dbg_dump(bool queue_work, const char
> *name, ...)
> }
>
> /*
> - * dpu_dbg_debugfs_open - debugfs open handler for evtlog dump
> + * dpu_dbg_debugfs_open - debugfs open handler for debug dump
> * @inode: debugfs inode
> * @file: file handle
> */
> @@ -2654,35 +2639,13 @@ static int dpu_dbg_debugfs_open(struct inode
> *inode, struct file *file)
> }
>
> /**
> - * dpu_evtlog_dump_read - debugfs read handler for evtlog dump
> - * @file: file handler
> - * @buff: user buffer content for debugfs
> - * @count: size of user buffer
> - * @ppos: position offset of user buffer
> - */
> -static ssize_t dpu_evtlog_dump_read(struct file *file, char __user
> *buff,
> - size_t count, loff_t *ppos)
> -{
> - ssize_t len = 0;
> - char evtlog_buf[DPU_EVTLOG_BUF_MAX];
> -
> - len = dpu_evtlog_dump_to_buffer(dpu_dbg_base.evtlog, evtlog_buf,
> - DPU_EVTLOG_BUF_MAX);
> - if (copy_to_user(buff, evtlog_buf, len))
> - return -EFAULT;
> - *ppos += len;
> -
> - return len;
> -}
> -
> -/**
> - * dpu_evtlog_dump_write - debugfs write handler for evtlog dump
> + * dpu_dbg_dump_write - debugfs write handler for debug dump
> * @file: file handler
> * @user_buf: user buffer content from debugfs
> * @count: size of user buffer
> * @ppos: position offset of user buffer
> */
> -static ssize_t dpu_evtlog_dump_write(struct file *file,
> +static ssize_t dpu_dbg_dump_write(struct file *file,
> const char __user *user_buf, size_t count, loff_t *ppos)
> {
> _dpu_dump_array(NULL, 0, dpu_dbg_base.panic_on_err, "dump_debugfs",
> @@ -2691,86 +2654,9 @@ static ssize_t dpu_evtlog_dump_write(struct file
> *file,
> return count;
> }
>
> -static const struct file_operations dpu_evtlog_fops = {
> +static const struct file_operations dpu_dbg_dump_fops = {
> .open = dpu_dbg_debugfs_open,
> - .read = dpu_evtlog_dump_read,
> - .write = dpu_evtlog_dump_write,
> -};
> -
> -/*
> - * dpu_evtlog_filter_show - read callback for evtlog filter
> - * @s: pointer to seq_file object
> - * @data: pointer to private data
> - */
> -static int dpu_evtlog_filter_show(struct seq_file *s, void *data)
> -{
> - struct dpu_dbg_evtlog *evtlog;
> - char buffer[64];
> - int i;
> -
> - if (!s || !s->private)
> - return -EINVAL;
> -
> - evtlog = s->private;
> -
> - for (i = 0; !dpu_evtlog_get_filter(
> - evtlog, i, buffer, ARRAY_SIZE(buffer)); ++i)
> - seq_printf(s, "*%s*\n", buffer);
> - return 0;
> -}
> -
> -/*
> - * dpu_evtlog_filter_open - debugfs open handler for evtlog filter
> - * @inode: debugfs inode
> - * @file: file handle
> - * Returns: zero on success
> - */
> -static int dpu_evtlog_filter_open(struct inode *inode, struct file
> *file)
> -{
> - if (!file)
> - return -EINVAL;
> -
> - return single_open(file, dpu_evtlog_filter_show, inode->i_private);
> -}
> -
> -/*
> - * dpu_evtlog_filter_write - write callback for evtlog filter
> - * @file: pointer to file structure
> - * @user_buf: pointer to incoming user data
> - * @count: size of incoming user buffer
> - * @ppos: pointer to file offset
> - */
> -static ssize_t dpu_evtlog_filter_write(struct file *file,
> - const char __user *user_buf, size_t count, loff_t *ppos)
> -{
> - char *tmp_filter = NULL;
> - ssize_t rc = 0;
> -
> - if (count > 0) {
> - /* copy user provided string and null terminate it */
> - tmp_filter = kzalloc(count + 1, GFP_KERNEL);
> - if (!tmp_filter)
> - rc = -ENOMEM;
> - else if (copy_from_user(tmp_filter, user_buf, count))
> - rc = -EFAULT;
> - }
> -
> - /* update actual filter configuration on success */
> - if (!rc) {
> - dpu_evtlog_set_filter(dpu_dbg_base.evtlog, tmp_filter);
> - rc = count;
> - }
> - kfree(tmp_filter);
> -
> - return rc;
> -}
> -
> -static const struct file_operations dpu_evtlog_filter_fops = {
> - .open = dpu_evtlog_filter_open,
> - .write = dpu_evtlog_filter_write,
> - .read = seq_read,
> - .llseek = seq_lseek,
> - .release = seq_release
> + .write = dpu_dbg_dump_write,
> };
>
> /**
> @@ -3018,12 +2904,7 @@ int dpu_dbg_debugfs_register(struct dentry
> *debugfs_root)
> return -EINVAL;
>
> debugfs_create_file("dump", 0600, debugfs_root, NULL,
> - &dpu_evtlog_fops);
> - debugfs_create_u32("enable", 0600, debugfs_root,
> - &(dpu_dbg_base.evtlog->enable));
> - debugfs_create_file("filter", 0600, debugfs_root,
> - dpu_dbg_base.evtlog,
> - &dpu_evtlog_filter_fops);
> + &dpu_dbg_dump_fops);
> debugfs_create_u32("panic", 0600, debugfs_root,
> &dpu_dbg_base.panic_on_err);
> debugfs_create_u32("reg_dump", 0600, debugfs_root,
> @@ -3106,19 +2987,12 @@ int dpu_dbg_init(struct device *dev)
> INIT_LIST_HEAD(&dpu_dbg_base.reg_base_list);
> dpu_dbg_base.dev = dev;
>
> - dpu_dbg_base.evtlog = dpu_evtlog_init();
> - if (IS_ERR_OR_NULL(dpu_dbg_base.evtlog))
> - return PTR_ERR(dpu_dbg_base.evtlog);
> -
> - dpu_dbg_base_evtlog = dpu_dbg_base.evtlog;
> -
> INIT_WORK(&dpu_dbg_base.dump_work, _dpu_dump_work);
> dpu_dbg_base.work_panic = false;
> dpu_dbg_base.panic_on_err = DEFAULT_PANIC;
> dpu_dbg_base.enable_reg_dump = DEFAULT_REGDUMP;
>
> - pr_info("evtlog_status: enable:%d, panic:%d, dump:%d\n",
> - dpu_dbg_base.evtlog->enable, dpu_dbg_base.panic_on_err,
> + pr_info("debug_status: panic:%d, dump:%d\n",
> dpu_dbg_base.panic_on_err,
> dpu_dbg_base.enable_reg_dump);
>
> return 0;
> @@ -3150,9 +3024,6 @@ static void dpu_dbg_reg_base_destroy(void)
> void dpu_dbg_destroy(void)
> {
> _dpu_dbg_debugfs_destroy();
> - dpu_dbg_base_evtlog = NULL;
> - dpu_evtlog_destroy(dpu_dbg_base.evtlog);
> - dpu_dbg_base.evtlog = NULL;
> dpu_dbg_reg_base_destroy();
> }
>
> diff --git a/drivers/gpu/drm/msm/dpu_dbg.h
> b/drivers/gpu/drm/msm/dpu_dbg.h
> index 283dbbc00690..052c78d5b4f5 100644
> --- a/drivers/gpu/drm/msm/dpu_dbg.h
> +++ b/drivers/gpu/drm/msm/dpu_dbg.h
> @@ -17,109 +17,11 @@
> #include <linux/debugfs.h>
> #include <linux/list.h>
>
> -#define DPU_EVTLOG_DATA_LIMITER (-1)
> -#define DPU_EVTLOG_FUNC_ENTRY 0x1111
> -#define DPU_EVTLOG_FUNC_EXIT 0x2222
> -#define DPU_EVTLOG_FUNC_CASE1 0x3333
> -#define DPU_EVTLOG_FUNC_CASE2 0x4444
> -#define DPU_EVTLOG_FUNC_CASE3 0x5555
> -#define DPU_EVTLOG_FUNC_CASE4 0x6666
> -#define DPU_EVTLOG_FUNC_CASE5 0x7777
> -#define DPU_EVTLOG_FUNC_CASE6 0x8888
> -#define DPU_EVTLOG_FUNC_CASE7 0x9999
> -#define DPU_EVTLOG_FUNC_CASE8 0xaaaa
> -#define DPU_EVTLOG_FUNC_CASE9 0xbbbb
> -#define DPU_EVTLOG_FUNC_CASE10 0xcccc
> -#define DPU_EVTLOG_PANIC 0xdead
> -#define DPU_EVTLOG_FATAL 0xbad
> -#define DPU_EVTLOG_ERROR 0xebad
> -
> -#define DPU_DBG_DUMP_DATA_LIMITER (NULL)
> -
> -enum dpu_dbg_evtlog_flag {
> - DPU_EVTLOG_CRITICAL = BIT(0),
> - DPU_EVTLOG_IRQ = BIT(1),
> - DPU_EVTLOG_VERBOSE = BIT(2),
> - DPU_EVTLOG_ALWAYS = -1
> -};
> -
> enum dpu_dbg_dump_flag {
> DPU_DBG_DUMP_IN_LOG = BIT(0),
> DPU_DBG_DUMP_IN_MEM = BIT(1),
> };
>
> -#ifdef CONFIG_DRM_DPU_EVTLOG_DEBUG
> -#define DPU_EVTLOG_DEFAULT_ENABLE (DPU_EVTLOG_CRITICAL |
> DPU_EVTLOG_IRQ)
> -#else
> -#define DPU_EVTLOG_DEFAULT_ENABLE 0
> -#endif
> -
> -/*
> - * evtlog will print this number of entries when it is called through
> - * sysfs node or panic. This prevents kernel log from evtlog message
> - * flood.
> - */
> -#define DPU_EVTLOG_PRINT_ENTRY 256
> -
> -/*
> - * evtlog keeps this number of entries in memory for debug purpose.
> This
> - * number must be greater than print entry to prevent out of bound
> evtlog
> - * entry array access.
> - */
> -#define DPU_EVTLOG_ENTRY (DPU_EVTLOG_PRINT_ENTRY * 4)
> -#define DPU_EVTLOG_MAX_DATA 15
> -#define DPU_EVTLOG_BUF_MAX 512
> -#define DPU_EVTLOG_BUF_ALIGN 32
> -
> -struct dpu_dbg_evtlog_log {
> - s64 time;
> - const char *name;
> - int line;
> - u32 data[DPU_EVTLOG_MAX_DATA];
> - u32 data_cnt;
> - int pid;
> -};
> -
> -/**
> - * @filter_list: Linked list of currently active filter strings
> - */
> -struct dpu_dbg_evtlog {
> - struct dpu_dbg_evtlog_log logs[DPU_EVTLOG_ENTRY];
> - u32 first;
> - u32 last;
> - u32 curr;
> - u32 next;
> - u32 enable;
> - spinlock_t spin_lock;
> - struct list_head filter_list;
> -};
> -
> -extern struct dpu_dbg_evtlog *dpu_dbg_base_evtlog;
> -
> -/**
> - * DPU_EVT32 - Write a list of 32bit values to the event log, default
> area
> - * ... - variable arguments
> - */
> -#define DPU_EVT32(...) dpu_evtlog_log(dpu_dbg_base_evtlog, __func__, \
> - __LINE__, DPU_EVTLOG_ALWAYS, ##__VA_ARGS__, \
> - DPU_EVTLOG_DATA_LIMITER)
> -
> -/**
> - * DPU_EVT32_VERBOSE - Write a list of 32bit values for verbose event
> logging
> - * ... - variable arguments
> - */
> -#define DPU_EVT32_VERBOSE(...) dpu_evtlog_log(dpu_dbg_base_evtlog,
> __func__, \
> - __LINE__, DPU_EVTLOG_VERBOSE, ##__VA_ARGS__, \
> - DPU_EVTLOG_DATA_LIMITER)
> -
> -/**
> - * DPU_EVT32_IRQ - Write a list of 32bit values to the event log, IRQ
> area
> - * ... - variable arguments
> - */
> -#define DPU_EVT32_IRQ(...) dpu_evtlog_log(dpu_dbg_base_evtlog,
> __func__, \
> - __LINE__, DPU_EVTLOG_IRQ, ##__VA_ARGS__, \
> - DPU_EVTLOG_DATA_LIMITER)
> -
> /**
> * DPU_DBG_DUMP - trigger dumping of all dpu_dbg facilities
> * @va_args: list of named register dump ranges and regions to dump,
> as
> @@ -128,74 +30,10 @@ extern struct dpu_dbg_evtlog *dpu_dbg_base_evtlog;
> * Including the special name "panic" will trigger a panic after
> * the dumping work has completed.
> */
> -#define DPU_DBG_DUMP(...) dpu_dbg_dump(false, __func__, ##__VA_ARGS__,
> \
> - DPU_DBG_DUMP_DATA_LIMITER)
> -
> -/**
> - * DPU_DBG_DUMP_WQ - trigger dumping of all dpu_dbg facilities,
> queuing the work
> - * @va_args: list of named register dump ranges and regions to dump,
> as
> - * registered previously through dpu_dbg_reg_register_base and
> - * dpu_dbg_reg_register_dump_range.
> - * Including the special name "panic" will trigger a panic after
> - * the dumping work has completed.
> - */
> -#define DPU_DBG_DUMP_WQ(...) dpu_dbg_dump(true, __func__,
> ##__VA_ARGS__, \
> - DPU_DBG_DUMP_DATA_LIMITER)
> +#define DPU_DBG_DUMP(...) dpu_dbg_dump(false, __func__, ##__VA_ARGS__,
> NULL)
>
> #if defined(CONFIG_DEBUG_FS)
>
> -/**
> - * dpu_evtlog_init - allocate a new event log object
> - * Returns: evtlog or -ERROR
> - */
> -struct dpu_dbg_evtlog *dpu_evtlog_init(void);
> -
> -/**
> - * dpu_evtlog_destroy - destroy previously allocated event log
> - * @evtlog: pointer to evtlog
> - * Returns: none
> - */
> -void dpu_evtlog_destroy(struct dpu_dbg_evtlog *evtlog);
> -
> -/**
> - * dpu_evtlog_log - log an entry into the event log.
> - * log collection may be enabled/disabled entirely via debugfs
> - * log area collection may be filtered by user provided flags via
> debugfs.
> - * @evtlog: pointer to evtlog
> - * @name: function name of call site
> - * @line: line number of call site
> - * @flag: log area filter flag checked against user's debugfs request
> - * Returns: none
> - */
> -void dpu_evtlog_log(struct dpu_dbg_evtlog *evtlog, const char *name,
> int line,
> - int flag, ...);
> -
> -/**
> - * dpu_evtlog_dump_all - print all entries in event log to kernel log
> - * @evtlog: pointer to evtlog
> - * Returns: none
> - */
> -void dpu_evtlog_dump_all(struct dpu_dbg_evtlog *evtlog);
> -
> -/**
> - * dpu_evtlog_is_enabled - check whether log collection is enabled for
> given
> - * event log and log area flag
> - * @evtlog: pointer to evtlog
> - * @flag: log area filter flag
> - * Returns: none
> - */
> -bool dpu_evtlog_is_enabled(struct dpu_dbg_evtlog *evtlog, u32 flag);
> -
> -/**
> - * dpu_evtlog_dump_to_buffer - print content of event log to the given
> buffer
> - * @evtlog: pointer to evtlog
> - * @evtlog_buf: target buffer to print into
> - * @evtlog_buf_size: size of target buffer
> - * Returns: number of bytes written to buffer
> - */
> -ssize_t dpu_evtlog_dump_to_buffer(struct dpu_dbg_evtlog *evtlog,
> - char *evtlog_buf, ssize_t evtlog_buf_size);
> -
> /**
> * dpu_dbg_init_dbg_buses - initialize debug bus dumping support for
> the chipset
> * @hwversion: Chipset revision
> @@ -203,7 +41,7 @@ ssize_t dpu_evtlog_dump_to_buffer(struct
> dpu_dbg_evtlog *evtlog,
> void dpu_dbg_init_dbg_buses(u32 hwversion);
>
> /**
> - * dpu_dbg_init - initialize global dpu debug facilities: evtlog,
> regdump
> + * dpu_dbg_init - initialize global dpu debug facilities: regdump
> * @dev: device handle
> * Returns: 0 or -ERROR
> */
> @@ -289,24 +127,6 @@ void dpu_dbg_reg_register_dump_range(const char
> *base_name,
> */
> void dpu_dbg_set_dpu_top_offset(u32 blk_off);
>
> -/**
> - * dpu_evtlog_set_filter - update evtlog filtering
> - * @evtlog: pointer to evtlog
> - * @filter: pointer to optional function name filter, set to NULL
> to disable
> - */
> -void dpu_evtlog_set_filter(struct dpu_dbg_evtlog *evtlog, char
> *filter);
> -
> -/**
> - * dpu_evtlog_get_filter - query configured evtlog filters
> - * @evtlog: pointer to evtlog
> - * @index: filter index to retrieve
> - * @buf: pointer to output filter buffer
> - * @bufsz: size of output filter buffer
> - * Returns: zero if a filter string was returned
> - */
> -int dpu_evtlog_get_filter(struct dpu_dbg_evtlog *evtlog, int index,
> - char *buf, size_t bufsz);
> -
> /**
> * dsi_ctrl_debug_dump - dump dsi debug dump status
> */
> @@ -317,35 +137,6 @@ static inline void dsi_ctrl_debug_dump(void) {}
> #endif
>
> #else
> -static inline struct dpu_dbg_evtlog *dpu_evtlog_init(void)
> -{
> - return NULL;
> -}
> -
> -static inline void dpu_evtlog_destroy(struct dpu_dbg_evtlog *evtlog)
> -{
> -}
> -
> -static inline void dpu_evtlog_log(struct dpu_dbg_evtlog *evtlog,
> - const char *name, int line, int flag, ...)
> -{
> -}
> -
> -static inline void dpu_evtlog_dump_all(struct dpu_dbg_evtlog *evtlog)
> -{
> -}
> -
> -static inline bool dpu_evtlog_is_enabled(struct dpu_dbg_evtlog
> *evtlog,
> - u32 flag)
> -{
> - return false;
> -}
> -
> -static inline ssize_t dpu_evtlog_dump_to_buffer(struct dpu_dbg_evtlog
> *evtlog,
> - char *evtlog_buf, ssize_t evtlog_buf_size)
> -{
> - return 0;
> -}
>
> static inline void dpu_dbg_init_dbg_buses(u32 hwversion)
> {
> @@ -385,17 +176,6 @@ void dpu_dbg_set_dpu_top_offset(u32 blk_off)
> {
> }
>
> -static inline void dpu_evtlog_set_filter(
> - struct dpu_dbg_evtlog *evtlog, char *filter)
> -{
> -}
> -
> -static inline int dpu_evtlog_get_filter(struct dpu_dbg_evtlog *evtlog,
> - int index, char *buf, size_t bufsz)
> -{
> - return -EINVAL;
> -}
> -
> static inline void dsi_ctrl_debug_dump(void)
> {
> }
> diff --git a/drivers/gpu/drm/msm/dpu_dbg_evtlog.c
> b/drivers/gpu/drm/msm/dpu_dbg_evtlog.c
> deleted file mode 100644
> index ef132c015a7e..000000000000
> --- a/drivers/gpu/drm/msm/dpu_dbg_evtlog.c
> +++ /dev/null
> @@ -1,306 +0,0 @@
> -/* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
> - *
> - * This program is free software; you can redistribute it and/or
> modify
> - * it under the terms of the GNU General Public License version 2 and
> - * only version 2 as published by the Free Software Foundation.
> - *
> - * This program is distributed in the hope that 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.
> - */
> -
> -#define pr_fmt(fmt) "dpu_dbg:[%s] " fmt, __func__
> -
> -#include <linux/delay.h>
> -#include <linux/spinlock.h>
> -#include <linux/ktime.h>
> -#include <linux/debugfs.h>
> -#include <linux/uaccess.h>
> -#include <linux/dma-buf.h>
> -#include <linux/slab.h>
> -
> -#include "dpu_dbg.h"
> -#include "dpu_trace.h"
> -
> -#define DPU_EVTLOG_FILTER_STRSIZE 64
> -
> -struct dpu_evtlog_filter {
> - struct list_head list;
> - char filter[DPU_EVTLOG_FILTER_STRSIZE];
> -};
> -
> -static bool _dpu_evtlog_is_filtered_no_lock(
> - struct dpu_dbg_evtlog *evtlog, const char *str)
> -{
> - struct dpu_evtlog_filter *filter_node;
> - bool rc;
> -
> - if (!str)
> - return true;
> -
> - /*
> - * Filter the incoming string IFF the list is not empty AND
> - * a matching entry is not in the list.
> - */
> - rc = !list_empty(&evtlog->filter_list);
> - list_for_each_entry(filter_node, &evtlog->filter_list, list)
> - if (strnstr(str, filter_node->filter,
> - DPU_EVTLOG_FILTER_STRSIZE - 1)) {
> - rc = false;
> - break;
> - }
> -
> - return rc;
> -}
> -
> -bool dpu_evtlog_is_enabled(struct dpu_dbg_evtlog *evtlog, u32 flag)
> -{
> - return evtlog && (evtlog->enable & flag);
> -}
> -
> -void dpu_evtlog_log(struct dpu_dbg_evtlog *evtlog, const char *name,
> int line,
> - int flag, ...)
> -{
> - unsigned long flags;
> - int i, val = 0;
> - va_list args;
> - struct dpu_dbg_evtlog_log *log;
> -
> - if (!evtlog)
> - return;
> -
> - if (!dpu_evtlog_is_enabled(evtlog, flag))
> - return;
> -
> - spin_lock_irqsave(&evtlog->spin_lock, flags);
> -
> - if (_dpu_evtlog_is_filtered_no_lock(evtlog, name))
> - goto exit;
> -
> - log = &evtlog->logs[evtlog->curr];
> - log->time = ktime_to_us(ktime_get());
> - log->name = name;
> - log->line = line;
> - log->data_cnt = 0;
> - log->pid = current->pid;
> -
> - va_start(args, flag);
> - for (i = 0; i < DPU_EVTLOG_MAX_DATA; i++) {
> -
> - val = va_arg(args, int);
> - if (val == DPU_EVTLOG_DATA_LIMITER)
> - break;
> -
> - log->data[i] = val;
> - }
> - va_end(args);
> - log->data_cnt = i;
> - evtlog->curr = (evtlog->curr + 1) % DPU_EVTLOG_ENTRY;
> - evtlog->last++;
> -
> - trace_dpu_evtlog(name, line, log->data_cnt, log->data);
> -exit:
> - spin_unlock_irqrestore(&evtlog->spin_lock, flags);
> -}
> -
> -/* always dump the last entries which are not dumped yet */
> -static bool _dpu_evtlog_dump_calc_range(struct dpu_dbg_evtlog *evtlog)
> -{
> - if (!evtlog)
> - return false;
> -
> - evtlog->first = evtlog->next;
> -
> - if (evtlog->last == evtlog->first)
> - return false;
> -
> - if (evtlog->last < evtlog->first) {
> - evtlog->first %= DPU_EVTLOG_ENTRY;
> - if (evtlog->last < evtlog->first)
> - evtlog->last += DPU_EVTLOG_ENTRY;
> - }
> -
> - if ((evtlog->last - evtlog->first) > DPU_EVTLOG_PRINT_ENTRY) {
> - pr_info("evtlog skipping %d entries, last=%d\n",
> - evtlog->last - evtlog->first - DPU_EVTLOG_PRINT_ENTRY,
> - evtlog->last - 1);
> - evtlog->first = evtlog->last - DPU_EVTLOG_PRINT_ENTRY;
> - }
> - evtlog->next = evtlog->first + 1;
> -
> - return true;
> -}
> -
> -ssize_t dpu_evtlog_dump_to_buffer(struct dpu_dbg_evtlog *evtlog,
> - char *evtlog_buf, ssize_t evtlog_buf_size)
> -{
> - int i;
> - ssize_t off = 0;
> - struct dpu_dbg_evtlog_log *log, *prev_log;
> - unsigned long flags;
> -
> - if (!evtlog || !evtlog_buf)
> - return 0;
> -
> - spin_lock_irqsave(&evtlog->spin_lock, flags);
> -
> - /* update markers, exit if nothing to print */
> - if (!_dpu_evtlog_dump_calc_range(evtlog))
> - goto exit;
> -
> - log = &evtlog->logs[evtlog->first % DPU_EVTLOG_ENTRY];
> -
> - prev_log = &evtlog->logs[(evtlog->first - 1) % DPU_EVTLOG_ENTRY];
> -
> - off = snprintf((evtlog_buf + off), (evtlog_buf_size - off),
> "%s:%-4d",
> - log->name, log->line);
> -
> - if (off < DPU_EVTLOG_BUF_ALIGN) {
> - memset((evtlog_buf + off), 0x20, (DPU_EVTLOG_BUF_ALIGN - off));
> - off = DPU_EVTLOG_BUF_ALIGN;
> - }
> -
> - off += snprintf((evtlog_buf + off), (evtlog_buf_size - off),
> - "=>[%-8d:%-11llu:%9llu][%-4d]:", evtlog->first,
> - log->time, (log->time - prev_log->time), log->pid);
> -
> - for (i = 0; i < log->data_cnt; i++)
> - off += snprintf((evtlog_buf + off), (evtlog_buf_size - off),
> - "%x ", log->data[i]);
> -
> - off += snprintf((evtlog_buf + off), (evtlog_buf_size - off), "\n");
> -exit:
> - spin_unlock_irqrestore(&evtlog->spin_lock, flags);
> -
> - return off;
> -}
> -
> -void dpu_evtlog_dump_all(struct dpu_dbg_evtlog *evtlog)
> -{
> - char buf[DPU_EVTLOG_BUF_MAX];
> -
> - if (!evtlog)
> - return;
> -
> - while (dpu_evtlog_dump_to_buffer(evtlog, buf, sizeof(buf)))
> - pr_info("%s", buf);
> -}
> -
> -struct dpu_dbg_evtlog *dpu_evtlog_init(void)
> -{
> - struct dpu_dbg_evtlog *evtlog;
> -
> - evtlog = kzalloc(sizeof(*evtlog), GFP_KERNEL);
> - if (!evtlog)
> - return ERR_PTR(-ENOMEM);
> -
> - spin_lock_init(&evtlog->spin_lock);
> - evtlog->enable = DPU_EVTLOG_DEFAULT_ENABLE;
> -
> - INIT_LIST_HEAD(&evtlog->filter_list);
> -
> - return evtlog;
> -}
> -
> -int dpu_evtlog_get_filter(struct dpu_dbg_evtlog *evtlog, int index,
> - char *buf, size_t bufsz)
> -{
> - struct dpu_evtlog_filter *filter_node;
> - unsigned long flags;
> - int rc = -EFAULT;
> -
> - if (!evtlog || !buf || !bufsz || index < 0)
> - return -EINVAL;
> -
> - spin_lock_irqsave(&evtlog->spin_lock, flags);
> - list_for_each_entry(filter_node, &evtlog->filter_list, list) {
> - if (index--)
> - continue;
> -
> - /* don't care about return value */
> - (void)strlcpy(buf, filter_node->filter, bufsz);
> - rc = 0;
> - break;
> - }
> - spin_unlock_irqrestore(&evtlog->spin_lock, flags);
> -
> - return rc;
> -}
> -
> -void dpu_evtlog_set_filter(struct dpu_dbg_evtlog *evtlog, char
> *filter)
> -{
> - struct dpu_evtlog_filter *filter_node, *tmp;
> - struct list_head free_list;
> - unsigned long flags;
> - char *flt;
> -
> - if (!evtlog)
> - return;
> -
> - INIT_LIST_HEAD(&free_list);
> -
> - /*
> - * Clear active filter list and cache filter_nodes locally
> - * to reduce memory fragmentation.
> - */
> - spin_lock_irqsave(&evtlog->spin_lock, flags);
> - list_for_each_entry_safe(filter_node, tmp, &evtlog->filter_list,
> list) {
> - list_del_init(&filter_node->list);
> - list_add_tail(&filter_node->list, &free_list);
> - }
> - spin_unlock_irqrestore(&evtlog->spin_lock, flags);
> -
> - /*
> - * Parse incoming filter request string and build up a new
> - * filter list. New filter nodes are taken from the local
> - * free list, if available, and allocated from the system
> - * heap once the free list is empty.
> - */
> - while (filter && (flt = strsep(&filter, "|\r\n\t ")) != NULL) {
> - if (!*flt)
> - continue;
> -
> - if (list_empty(&free_list)) {
> - filter_node = kzalloc(sizeof(*filter_node), GFP_KERNEL);
> - if (!filter_node)
> - break;
> -
> - INIT_LIST_HEAD(&filter_node->list);
> - } else {
> - filter_node = list_first_entry(&free_list,
> - struct dpu_evtlog_filter, list);
> - list_del_init(&filter_node->list);
> - }
> -
> - /* don't care if copy truncated */
> - (void)strlcpy(filter_node->filter, flt,
> - DPU_EVTLOG_FILTER_STRSIZE);
> -
> - spin_lock_irqsave(&evtlog->spin_lock, flags);
> - list_add_tail(&filter_node->list, &evtlog->filter_list);
> - spin_unlock_irqrestore(&evtlog->spin_lock, flags);
> - }
> -
> - /*
> - * Free any unused filter_nodes back to the system.
> - */
> - list_for_each_entry_safe(filter_node, tmp, &free_list, list) {
> - list_del(&filter_node->list);
> - kfree(filter_node);
> - }
> -}
> -
> -void dpu_evtlog_destroy(struct dpu_dbg_evtlog *evtlog)
> -{
> - struct dpu_evtlog_filter *filter_node, *tmp;
> -
> - if (!evtlog)
> - return;
> -
> - list_for_each_entry_safe(filter_node, tmp, &evtlog->filter_list,
> list) {
> - list_del(&filter_node->list);
> - kfree(filter_node);
> - }
> - kfree(evtlog);
> -}
More information about the Freedreno
mailing list