[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