From: ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org
To: Sean Paul <seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org,
robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org,
freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org,
hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org
Subject: Re: [DPU PATCH 13/19] drm/msm: dpu: Remove dpu evtlog
Date: Tue, 26 Jun 2018 12:22:46 +0530 [thread overview]
Message-ID: <20d89c24389a5349b4acb634050cf048@codeaurora.org> (raw)
In-Reply-To: <20180620204841.56354-14-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
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@chromium.org>
Reviewed-by: Rajesh Yadav <ryadav@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);
> -}
_______________________________________________
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno
next prev parent reply other threads:[~2018-06-26 6:52 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-20 20:48 [DPU PATCH 00/19] drm/msm: dpu: Clean up dpu_dbg Sean Paul
[not found] ` <20180620204841.56354-1-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2018-06-20 20:48 ` [DPU PATCH 01/19] drm/msm: dpu_encoder: Replace DPU_EVT with tracepoints Sean Paul
[not found] ` <20180620204841.56354-2-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2018-06-26 15:57 ` ryadav-sgV2jX0FEOL9JmXXK+q4OQ
2018-06-20 20:48 ` [DPU PATCH 02/19] drm/msm: dpu_crtc: " Sean Paul
[not found] ` <20180620204841.56354-3-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2018-06-26 15:45 ` ryadav-sgV2jX0FEOL9JmXXK+q4OQ
2018-06-20 20:48 ` [DPU PATCH 03/19] drm/msm: dpu_plane: " Sean Paul
[not found] ` <20180620204841.56354-4-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2018-06-26 6:39 ` ryadav-sgV2jX0FEOL9JmXXK+q4OQ
2018-06-20 20:48 ` [DPU PATCH 04/19] drm/msm: dpu_rm: " Sean Paul
[not found] ` <20180620204841.56354-5-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2018-06-26 10:30 ` ryadav-sgV2jX0FEOL9JmXXK+q4OQ
2018-06-20 20:48 ` [DPU PATCH 05/19] drm/msm: dpu_kms: " Sean Paul
[not found] ` <20180620204841.56354-6-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2018-06-26 6:42 ` ryadav-sgV2jX0FEOL9JmXXK+q4OQ
2018-06-20 20:48 ` [DPU PATCH 06/19] drm/msm: dpu_encoder_phys_cmd: " Sean Paul
[not found] ` <20180620204841.56354-7-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2018-06-26 10:37 ` ryadav-sgV2jX0FEOL9JmXXK+q4OQ
2018-06-20 20:48 ` [DPU PATCH 07/19] drm/msm: dpu_encoder_phys_vid: " Sean Paul
[not found] ` <20180620204841.56354-8-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2018-06-26 10:47 ` ryadav-sgV2jX0FEOL9JmXXK+q4OQ
2018-06-20 20:48 ` [DPU PATCH 08/19] drm/msm: dpu_vbif: " Sean Paul
[not found] ` <20180620204841.56354-9-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2018-06-26 6:43 ` ryadav-sgV2jX0FEOL9JmXXK+q4OQ
2018-06-20 20:48 ` [DPU PATCH 09/19] drm/msm: dpu_pingpong: " Sean Paul
[not found] ` <20180620204841.56354-10-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2018-06-26 6:45 ` ryadav-sgV2jX0FEOL9JmXXK+q4OQ
2018-06-20 20:48 ` [DPU PATCH 10/19] drm/msm: dpu_core_irq: " Sean Paul
[not found] ` <20180620204841.56354-11-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2018-06-26 10:51 ` ryadav-sgV2jX0FEOL9JmXXK+q4OQ
2018-06-20 20:48 ` [DPU PATCH 11/19] drm/msm: dpu_core_perf: " Sean Paul
[not found] ` <20180620204841.56354-12-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2018-06-26 6:46 ` ryadav-sgV2jX0FEOL9JmXXK+q4OQ
2018-06-20 20:48 ` [DPU PATCH 12/19] drm/msm: dpu_mdss: Replace DPU_EVT with DRM_ERROR Sean Paul
[not found] ` <20180620204841.56354-13-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2018-06-26 6:47 ` ryadav-sgV2jX0FEOL9JmXXK+q4OQ
2018-06-20 20:48 ` [DPU PATCH 13/19] drm/msm: dpu: Remove dpu evtlog Sean Paul
[not found] ` <20180620204841.56354-14-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2018-06-26 6:52 ` ryadav-sgV2jX0FEOL9JmXXK+q4OQ [this message]
2018-06-20 20:48 ` [DPU PATCH 14/19] drm/msm: dpu_dbg: Remove dump_all option for dumping registers Sean Paul
2018-06-20 20:48 ` [DPU PATCH 15/19] drm/msm: dpu: Remove arbitrary register dumps Sean Paul
2018-06-20 20:48 ` [DPU PATCH 16/19] drm/msm: dpu: Remove panic from dpu debug dump Sean Paul
2018-06-20 20:48 ` [DPU PATCH 17/19] drm/msm: dpu: Remove dsi debug block name Sean Paul
2018-06-20 20:48 ` [DPU PATCH 18/19] drm/msm: dpu_dbg: Remove string parsing from DBG_DUMP Sean Paul
2018-06-20 20:48 ` [DPU PATCH 19/19] drm/msm: dpu: Move dpu_dbg into dpu1 directory Sean Paul
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20d89c24389a5349b4acb634050cf048@codeaurora.org \
--to=ryadav-sgv2jx0feol9jmxxk+q4oq@public.gmane.org \
--cc=abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
--cc=freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
--cc=jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
--cc=linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.