xref: /openbmc/linux/lib/dynamic_debug.c (revision d086a1c6)
1 /*
2  * lib/dynamic_debug.c
3  *
4  * make pr_debug()/dev_dbg() calls runtime configurable based upon their
5  * source module.
6  *
7  * Copyright (C) 2008 Jason Baron <jbaron@redhat.com>
8  * By Greg Banks <gnb@melbourne.sgi.com>
9  * Copyright (c) 2008 Silicon Graphics Inc.  All Rights Reserved.
10  * Copyright (C) 2011 Bart Van Assche.  All Rights Reserved.
11  * Copyright (C) 2013 Du, Changbin <changbin.du@gmail.com>
12  */
13 
14 #define pr_fmt(fmt) "dyndbg: " fmt
15 
16 #include <linux/kernel.h>
17 #include <linux/module.h>
18 #include <linux/moduleparam.h>
19 #include <linux/kallsyms.h>
20 #include <linux/types.h>
21 #include <linux/mutex.h>
22 #include <linux/proc_fs.h>
23 #include <linux/seq_file.h>
24 #include <linux/list.h>
25 #include <linux/sysctl.h>
26 #include <linux/ctype.h>
27 #include <linux/string.h>
28 #include <linux/parser.h>
29 #include <linux/string_helpers.h>
30 #include <linux/uaccess.h>
31 #include <linux/dynamic_debug.h>
32 #include <linux/debugfs.h>
33 #include <linux/slab.h>
34 #include <linux/jump_label.h>
35 #include <linux/hardirq.h>
36 #include <linux/sched.h>
37 #include <linux/device.h>
38 #include <linux/netdevice.h>
39 
40 #include <rdma/ib_verbs.h>
41 
42 extern struct _ddebug __start___dyndbg[];
43 extern struct _ddebug __stop___dyndbg[];
44 
45 struct ddebug_table {
46 	struct list_head link;
47 	const char *mod_name;
48 	unsigned int num_ddebugs;
49 	struct _ddebug *ddebugs;
50 };
51 
52 struct ddebug_query {
53 	const char *filename;
54 	const char *module;
55 	const char *function;
56 	const char *format;
57 	unsigned int first_lineno, last_lineno;
58 };
59 
60 struct ddebug_iter {
61 	struct ddebug_table *table;
62 	unsigned int idx;
63 };
64 
65 struct flag_settings {
66 	unsigned int flags;
67 	unsigned int mask;
68 };
69 
70 static DEFINE_MUTEX(ddebug_lock);
71 static LIST_HEAD(ddebug_tables);
72 static int verbose;
73 module_param(verbose, int, 0644);
74 
75 /* Return the path relative to source root */
76 static inline const char *trim_prefix(const char *path)
77 {
78 	int skip = strlen(__FILE__) - strlen("lib/dynamic_debug.c");
79 
80 	if (strncmp(path, __FILE__, skip))
81 		skip = 0; /* prefix mismatch, don't skip */
82 
83 	return path + skip;
84 }
85 
86 static struct { unsigned flag:8; char opt_char; } opt_array[] = {
87 	{ _DPRINTK_FLAGS_PRINT, 'p' },
88 	{ _DPRINTK_FLAGS_INCL_MODNAME, 'm' },
89 	{ _DPRINTK_FLAGS_INCL_FUNCNAME, 'f' },
90 	{ _DPRINTK_FLAGS_INCL_LINENO, 'l' },
91 	{ _DPRINTK_FLAGS_INCL_TID, 't' },
92 	{ _DPRINTK_FLAGS_NONE, '_' },
93 };
94 
95 struct flagsbuf { char buf[ARRAY_SIZE(opt_array)+1]; };
96 
97 /* format a string into buf[] which describes the _ddebug's flags */
98 static char *ddebug_describe_flags(unsigned int flags, struct flagsbuf *fb)
99 {
100 	char *p = fb->buf;
101 	int i;
102 
103 	for (i = 0; i < ARRAY_SIZE(opt_array); ++i)
104 		if (flags & opt_array[i].flag)
105 			*p++ = opt_array[i].opt_char;
106 	if (p == fb->buf)
107 		*p++ = '_';
108 	*p = '\0';
109 
110 	return fb->buf;
111 }
112 
113 #define vnpr_info(lvl, fmt, ...)				\
114 do {								\
115 	if (verbose >= lvl)					\
116 		pr_info(fmt, ##__VA_ARGS__);			\
117 } while (0)
118 
119 #define vpr_info(fmt, ...)	vnpr_info(1, fmt, ##__VA_ARGS__)
120 #define v2pr_info(fmt, ...)	vnpr_info(2, fmt, ##__VA_ARGS__)
121 
122 static void vpr_info_dq(const struct ddebug_query *query, const char *msg)
123 {
124 	/* trim any trailing newlines */
125 	int fmtlen = 0;
126 
127 	if (query->format) {
128 		fmtlen = strlen(query->format);
129 		while (fmtlen && query->format[fmtlen - 1] == '\n')
130 			fmtlen--;
131 	}
132 
133 	vpr_info("%s: func=\"%s\" file=\"%s\" module=\"%s\" format=\"%.*s\" lineno=%u-%u\n",
134 		 msg,
135 		 query->function ?: "",
136 		 query->filename ?: "",
137 		 query->module ?: "",
138 		 fmtlen, query->format ?: "",
139 		 query->first_lineno, query->last_lineno);
140 }
141 
142 /*
143  * Search the tables for _ddebug's which match the given `query' and
144  * apply the `flags' and `mask' to them.  Returns number of matching
145  * callsites, normally the same as number of changes.  If verbose,
146  * logs the changes.  Takes ddebug_lock.
147  */
148 static int ddebug_change(const struct ddebug_query *query,
149 			 struct flag_settings *modifiers)
150 {
151 	int i;
152 	struct ddebug_table *dt;
153 	unsigned int newflags;
154 	unsigned int nfound = 0;
155 	struct flagsbuf fbuf;
156 
157 	/* search for matching ddebugs */
158 	mutex_lock(&ddebug_lock);
159 	list_for_each_entry(dt, &ddebug_tables, link) {
160 
161 		/* match against the module name */
162 		if (query->module &&
163 		    !match_wildcard(query->module, dt->mod_name))
164 			continue;
165 
166 		for (i = 0; i < dt->num_ddebugs; i++) {
167 			struct _ddebug *dp = &dt->ddebugs[i];
168 
169 			/* match against the source filename */
170 			if (query->filename &&
171 			    !match_wildcard(query->filename, dp->filename) &&
172 			    !match_wildcard(query->filename,
173 					   kbasename(dp->filename)) &&
174 			    !match_wildcard(query->filename,
175 					   trim_prefix(dp->filename)))
176 				continue;
177 
178 			/* match against the function */
179 			if (query->function &&
180 			    !match_wildcard(query->function, dp->function))
181 				continue;
182 
183 			/* match against the format */
184 			if (query->format) {
185 				if (*query->format == '^') {
186 					char *p;
187 					/* anchored search. match must be at beginning */
188 					p = strstr(dp->format, query->format+1);
189 					if (p != dp->format)
190 						continue;
191 				} else if (!strstr(dp->format, query->format))
192 					continue;
193 			}
194 
195 			/* match against the line number range */
196 			if (query->first_lineno &&
197 			    dp->lineno < query->first_lineno)
198 				continue;
199 			if (query->last_lineno &&
200 			    dp->lineno > query->last_lineno)
201 				continue;
202 
203 			nfound++;
204 
205 			newflags = (dp->flags & modifiers->mask) | modifiers->flags;
206 			if (newflags == dp->flags)
207 				continue;
208 #ifdef CONFIG_JUMP_LABEL
209 			if (dp->flags & _DPRINTK_FLAGS_PRINT) {
210 				if (!(modifiers->flags & _DPRINTK_FLAGS_PRINT))
211 					static_branch_disable(&dp->key.dd_key_true);
212 			} else if (modifiers->flags & _DPRINTK_FLAGS_PRINT)
213 				static_branch_enable(&dp->key.dd_key_true);
214 #endif
215 			dp->flags = newflags;
216 			v2pr_info("changed %s:%d [%s]%s =%s\n",
217 				 trim_prefix(dp->filename), dp->lineno,
218 				 dt->mod_name, dp->function,
219 				 ddebug_describe_flags(dp->flags, &fbuf));
220 		}
221 	}
222 	mutex_unlock(&ddebug_lock);
223 
224 	if (!nfound && verbose)
225 		pr_info("no matches for query\n");
226 
227 	return nfound;
228 }
229 
230 /*
231  * Split the buffer `buf' into space-separated words.
232  * Handles simple " and ' quoting, i.e. without nested,
233  * embedded or escaped \".  Return the number of words
234  * or <0 on error.
235  */
236 static int ddebug_tokenize(char *buf, char *words[], int maxwords)
237 {
238 	int nwords = 0;
239 
240 	while (*buf) {
241 		char *end;
242 
243 		/* Skip leading whitespace */
244 		buf = skip_spaces(buf);
245 		if (!*buf)
246 			break;	/* oh, it was trailing whitespace */
247 		if (*buf == '#')
248 			break;	/* token starts comment, skip rest of line */
249 
250 		/* find `end' of word, whitespace separated or quoted */
251 		if (*buf == '"' || *buf == '\'') {
252 			int quote = *buf++;
253 			for (end = buf; *end && *end != quote; end++)
254 				;
255 			if (!*end) {
256 				pr_err("unclosed quote: %s\n", buf);
257 				return -EINVAL;	/* unclosed quote */
258 			}
259 		} else {
260 			for (end = buf; *end && !isspace(*end); end++)
261 				;
262 			BUG_ON(end == buf);
263 		}
264 
265 		/* `buf' is start of word, `end' is one past its end */
266 		if (nwords == maxwords) {
267 			pr_err("too many words, legal max <=%d\n", maxwords);
268 			return -EINVAL;	/* ran out of words[] before bytes */
269 		}
270 		if (*end)
271 			*end++ = '\0';	/* terminate the word */
272 		words[nwords++] = buf;
273 		buf = end;
274 	}
275 
276 	if (verbose) {
277 		int i;
278 		pr_info("split into words:");
279 		for (i = 0; i < nwords; i++)
280 			pr_cont(" \"%s\"", words[i]);
281 		pr_cont("\n");
282 	}
283 
284 	return nwords;
285 }
286 
287 /*
288  * Parse a single line number.  Note that the empty string ""
289  * is treated as a special case and converted to zero, which
290  * is later treated as a "don't care" value.
291  */
292 static inline int parse_lineno(const char *str, unsigned int *val)
293 {
294 	BUG_ON(str == NULL);
295 	if (*str == '\0') {
296 		*val = 0;
297 		return 0;
298 	}
299 	if (kstrtouint(str, 10, val) < 0) {
300 		pr_err("bad line-number: %s\n", str);
301 		return -EINVAL;
302 	}
303 	return 0;
304 }
305 
306 static int parse_linerange(struct ddebug_query *query, const char *first)
307 {
308 	char *last = strchr(first, '-');
309 
310 	if (query->first_lineno || query->last_lineno) {
311 		pr_err("match-spec: line used 2x\n");
312 		return -EINVAL;
313 	}
314 	if (last)
315 		*last++ = '\0';
316 	if (parse_lineno(first, &query->first_lineno) < 0)
317 		return -EINVAL;
318 	if (last) {
319 		/* range <first>-<last> */
320 		if (parse_lineno(last, &query->last_lineno) < 0)
321 			return -EINVAL;
322 
323 		/* special case for last lineno not specified */
324 		if (query->last_lineno == 0)
325 			query->last_lineno = UINT_MAX;
326 
327 		if (query->last_lineno < query->first_lineno) {
328 			pr_err("last-line:%d < 1st-line:%d\n",
329 			       query->last_lineno,
330 			       query->first_lineno);
331 			return -EINVAL;
332 		}
333 	} else {
334 		query->last_lineno = query->first_lineno;
335 	}
336 	vpr_info("parsed line %d-%d\n", query->first_lineno,
337 		 query->last_lineno);
338 	return 0;
339 }
340 
341 static int check_set(const char **dest, char *src, char *name)
342 {
343 	int rc = 0;
344 
345 	if (*dest) {
346 		rc = -EINVAL;
347 		pr_err("match-spec:%s val:%s overridden by %s\n",
348 		       name, *dest, src);
349 	}
350 	*dest = src;
351 	return rc;
352 }
353 
354 /*
355  * Parse words[] as a ddebug query specification, which is a series
356  * of (keyword, value) pairs chosen from these possibilities:
357  *
358  * func <function-name>
359  * file <full-pathname>
360  * file <base-filename>
361  * module <module-name>
362  * format <escaped-string-to-find-in-format>
363  * line <lineno>
364  * line <first-lineno>-<last-lineno> // where either may be empty
365  *
366  * Only 1 of each type is allowed.
367  * Returns 0 on success, <0 on error.
368  */
369 static int ddebug_parse_query(char *words[], int nwords,
370 			struct ddebug_query *query, const char *modname)
371 {
372 	unsigned int i;
373 	int rc = 0;
374 	char *fline;
375 
376 	/* check we have an even number of words */
377 	if (nwords % 2 != 0) {
378 		pr_err("expecting pairs of match-spec <value>\n");
379 		return -EINVAL;
380 	}
381 
382 	if (modname)
383 		/* support $modname.dyndbg=<multiple queries> */
384 		query->module = modname;
385 
386 	for (i = 0; i < nwords; i += 2) {
387 		if (!strcmp(words[i], "func")) {
388 			rc = check_set(&query->function, words[i+1], "func");
389 		} else if (!strcmp(words[i], "file")) {
390 			if (check_set(&query->filename, words[i+1], "file"))
391 				return -EINVAL;
392 
393 			/* tail :$info is function or line-range */
394 			fline = strchr(query->filename, ':');
395 			if (!fline)
396 				break;
397 			*fline++ = '\0';
398 			if (isalpha(*fline) || *fline == '*' || *fline == '?') {
399 				/* take as function name */
400 				if (check_set(&query->function, fline, "func"))
401 					return -EINVAL;
402 			} else {
403 				if (parse_linerange(query, fline))
404 					return -EINVAL;
405 			}
406 		} else if (!strcmp(words[i], "module")) {
407 			rc = check_set(&query->module, words[i+1], "module");
408 		} else if (!strcmp(words[i], "format")) {
409 			string_unescape_inplace(words[i+1], UNESCAPE_SPACE |
410 							    UNESCAPE_OCTAL |
411 							    UNESCAPE_SPECIAL);
412 			rc = check_set(&query->format, words[i+1], "format");
413 		} else if (!strcmp(words[i], "line")) {
414 			if (parse_linerange(query, words[i+1]))
415 				return -EINVAL;
416 		} else {
417 			pr_err("unknown keyword \"%s\"\n", words[i]);
418 			return -EINVAL;
419 		}
420 		if (rc)
421 			return rc;
422 	}
423 	vpr_info_dq(query, "parsed");
424 	return 0;
425 }
426 
427 /*
428  * Parse `str' as a flags specification, format [-+=][p]+.
429  * Sets up *maskp and *flagsp to be used when changing the
430  * flags fields of matched _ddebug's.  Returns 0 on success
431  * or <0 on error.
432  */
433 static int ddebug_parse_flags(const char *str, struct flag_settings *modifiers)
434 {
435 	int op, i;
436 
437 	switch (*str) {
438 	case '+':
439 	case '-':
440 	case '=':
441 		op = *str++;
442 		break;
443 	default:
444 		pr_err("bad flag-op %c, at start of %s\n", *str, str);
445 		return -EINVAL;
446 	}
447 	vpr_info("op='%c'\n", op);
448 
449 	for (; *str ; ++str) {
450 		for (i = ARRAY_SIZE(opt_array) - 1; i >= 0; i--) {
451 			if (*str == opt_array[i].opt_char) {
452 				modifiers->flags |= opt_array[i].flag;
453 				break;
454 			}
455 		}
456 		if (i < 0) {
457 			pr_err("unknown flag '%c'\n", *str);
458 			return -EINVAL;
459 		}
460 	}
461 	vpr_info("flags=0x%x\n", modifiers->flags);
462 
463 	/* calculate final flags, mask based upon op */
464 	switch (op) {
465 	case '=':
466 		/* modifiers->flags already set */
467 		modifiers->mask = 0;
468 		break;
469 	case '+':
470 		modifiers->mask = ~0U;
471 		break;
472 	case '-':
473 		modifiers->mask = ~modifiers->flags;
474 		modifiers->flags = 0;
475 		break;
476 	}
477 	vpr_info("*flagsp=0x%x *maskp=0x%x\n", modifiers->flags, modifiers->mask);
478 
479 	return 0;
480 }
481 
482 static int ddebug_exec_query(char *query_string, const char *modname)
483 {
484 	struct flag_settings modifiers = {};
485 	struct ddebug_query query = {};
486 #define MAXWORDS 9
487 	int nwords, nfound;
488 	char *words[MAXWORDS];
489 
490 	nwords = ddebug_tokenize(query_string, words, MAXWORDS);
491 	if (nwords <= 0) {
492 		pr_err("tokenize failed\n");
493 		return -EINVAL;
494 	}
495 	/* check flags 1st (last arg) so query is pairs of spec,val */
496 	if (ddebug_parse_flags(words[nwords-1], &modifiers)) {
497 		pr_err("flags parse failed\n");
498 		return -EINVAL;
499 	}
500 	if (ddebug_parse_query(words, nwords-1, &query, modname)) {
501 		pr_err("query parse failed\n");
502 		return -EINVAL;
503 	}
504 	/* actually go and implement the change */
505 	nfound = ddebug_change(&query, &modifiers);
506 	vpr_info_dq(&query, nfound ? "applied" : "no-match");
507 
508 	return nfound;
509 }
510 
511 /* handle multiple queries in query string, continue on error, return
512    last error or number of matching callsites.  Module name is either
513    in param (for boot arg) or perhaps in query string.
514 */
515 static int ddebug_exec_queries(char *query, const char *modname)
516 {
517 	char *split;
518 	int i, errs = 0, exitcode = 0, rc, nfound = 0;
519 
520 	for (i = 0; query; query = split) {
521 		split = strpbrk(query, ";\n");
522 		if (split)
523 			*split++ = '\0';
524 
525 		query = skip_spaces(query);
526 		if (!query || !*query || *query == '#')
527 			continue;
528 
529 		vpr_info("query %d: \"%s\"\n", i, query);
530 
531 		rc = ddebug_exec_query(query, modname);
532 		if (rc < 0) {
533 			errs++;
534 			exitcode = rc;
535 		} else {
536 			nfound += rc;
537 		}
538 		i++;
539 	}
540 	vpr_info("processed %d queries, with %d matches, %d errs\n",
541 		 i, nfound, errs);
542 
543 	if (exitcode)
544 		return exitcode;
545 	return nfound;
546 }
547 
548 /**
549  * dynamic_debug_exec_queries - select and change dynamic-debug prints
550  * @query: query-string described in admin-guide/dynamic-debug-howto
551  * @modname: string containing module name, usually &module.mod_name
552  *
553  * This uses the >/proc/dynamic_debug/control reader, allowing module
554  * authors to modify their dynamic-debug callsites. The modname is
555  * canonically struct module.mod_name, but can also be null or a
556  * module-wildcard, for example: "drm*".
557  */
558 int dynamic_debug_exec_queries(const char *query, const char *modname)
559 {
560 	int rc;
561 	char *qry = kstrndup(query, PAGE_SIZE, GFP_KERNEL);
562 
563 	if (!query)
564 		return -ENOMEM;
565 
566 	rc = ddebug_exec_queries(qry, modname);
567 	kfree(qry);
568 	return rc;
569 }
570 EXPORT_SYMBOL_GPL(dynamic_debug_exec_queries);
571 
572 #define PREFIX_SIZE 64
573 
574 static int remaining(int wrote)
575 {
576 	if (PREFIX_SIZE - wrote > 0)
577 		return PREFIX_SIZE - wrote;
578 	return 0;
579 }
580 
581 static char *dynamic_emit_prefix(const struct _ddebug *desc, char *buf)
582 {
583 	int pos_after_tid;
584 	int pos = 0;
585 
586 	*buf = '\0';
587 
588 	if (desc->flags & _DPRINTK_FLAGS_INCL_TID) {
589 		if (in_interrupt())
590 			pos += snprintf(buf + pos, remaining(pos), "<intr> ");
591 		else
592 			pos += snprintf(buf + pos, remaining(pos), "[%d] ",
593 					task_pid_vnr(current));
594 	}
595 	pos_after_tid = pos;
596 	if (desc->flags & _DPRINTK_FLAGS_INCL_MODNAME)
597 		pos += snprintf(buf + pos, remaining(pos), "%s:",
598 				desc->modname);
599 	if (desc->flags & _DPRINTK_FLAGS_INCL_FUNCNAME)
600 		pos += snprintf(buf + pos, remaining(pos), "%s:",
601 				desc->function);
602 	if (desc->flags & _DPRINTK_FLAGS_INCL_LINENO)
603 		pos += snprintf(buf + pos, remaining(pos), "%d:",
604 				desc->lineno);
605 	if (pos - pos_after_tid)
606 		pos += snprintf(buf + pos, remaining(pos), " ");
607 	if (pos >= PREFIX_SIZE)
608 		buf[PREFIX_SIZE - 1] = '\0';
609 
610 	return buf;
611 }
612 
613 void __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...)
614 {
615 	va_list args;
616 	struct va_format vaf;
617 	char buf[PREFIX_SIZE];
618 
619 	BUG_ON(!descriptor);
620 	BUG_ON(!fmt);
621 
622 	va_start(args, fmt);
623 
624 	vaf.fmt = fmt;
625 	vaf.va = &args;
626 
627 	printk(KERN_DEBUG "%s%pV", dynamic_emit_prefix(descriptor, buf), &vaf);
628 
629 	va_end(args);
630 }
631 EXPORT_SYMBOL(__dynamic_pr_debug);
632 
633 void __dynamic_dev_dbg(struct _ddebug *descriptor,
634 		      const struct device *dev, const char *fmt, ...)
635 {
636 	struct va_format vaf;
637 	va_list args;
638 
639 	BUG_ON(!descriptor);
640 	BUG_ON(!fmt);
641 
642 	va_start(args, fmt);
643 
644 	vaf.fmt = fmt;
645 	vaf.va = &args;
646 
647 	if (!dev) {
648 		printk(KERN_DEBUG "(NULL device *): %pV", &vaf);
649 	} else {
650 		char buf[PREFIX_SIZE];
651 
652 		dev_printk_emit(LOGLEVEL_DEBUG, dev, "%s%s %s: %pV",
653 				dynamic_emit_prefix(descriptor, buf),
654 				dev_driver_string(dev), dev_name(dev),
655 				&vaf);
656 	}
657 
658 	va_end(args);
659 }
660 EXPORT_SYMBOL(__dynamic_dev_dbg);
661 
662 #ifdef CONFIG_NET
663 
664 void __dynamic_netdev_dbg(struct _ddebug *descriptor,
665 			  const struct net_device *dev, const char *fmt, ...)
666 {
667 	struct va_format vaf;
668 	va_list args;
669 
670 	BUG_ON(!descriptor);
671 	BUG_ON(!fmt);
672 
673 	va_start(args, fmt);
674 
675 	vaf.fmt = fmt;
676 	vaf.va = &args;
677 
678 	if (dev && dev->dev.parent) {
679 		char buf[PREFIX_SIZE];
680 
681 		dev_printk_emit(LOGLEVEL_DEBUG, dev->dev.parent,
682 				"%s%s %s %s%s: %pV",
683 				dynamic_emit_prefix(descriptor, buf),
684 				dev_driver_string(dev->dev.parent),
685 				dev_name(dev->dev.parent),
686 				netdev_name(dev), netdev_reg_state(dev),
687 				&vaf);
688 	} else if (dev) {
689 		printk(KERN_DEBUG "%s%s: %pV", netdev_name(dev),
690 		       netdev_reg_state(dev), &vaf);
691 	} else {
692 		printk(KERN_DEBUG "(NULL net_device): %pV", &vaf);
693 	}
694 
695 	va_end(args);
696 }
697 EXPORT_SYMBOL(__dynamic_netdev_dbg);
698 
699 #endif
700 
701 #if IS_ENABLED(CONFIG_INFINIBAND)
702 
703 void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
704 			 const struct ib_device *ibdev, const char *fmt, ...)
705 {
706 	struct va_format vaf;
707 	va_list args;
708 
709 	va_start(args, fmt);
710 
711 	vaf.fmt = fmt;
712 	vaf.va = &args;
713 
714 	if (ibdev && ibdev->dev.parent) {
715 		char buf[PREFIX_SIZE];
716 
717 		dev_printk_emit(LOGLEVEL_DEBUG, ibdev->dev.parent,
718 				"%s%s %s %s: %pV",
719 				dynamic_emit_prefix(descriptor, buf),
720 				dev_driver_string(ibdev->dev.parent),
721 				dev_name(ibdev->dev.parent),
722 				dev_name(&ibdev->dev),
723 				&vaf);
724 	} else if (ibdev) {
725 		printk(KERN_DEBUG "%s: %pV", dev_name(&ibdev->dev), &vaf);
726 	} else {
727 		printk(KERN_DEBUG "(NULL ib_device): %pV", &vaf);
728 	}
729 
730 	va_end(args);
731 }
732 EXPORT_SYMBOL(__dynamic_ibdev_dbg);
733 
734 #endif
735 
736 #define DDEBUG_STRING_SIZE 1024
737 static __initdata char ddebug_setup_string[DDEBUG_STRING_SIZE];
738 
739 static __init int ddebug_setup_query(char *str)
740 {
741 	if (strlen(str) >= DDEBUG_STRING_SIZE) {
742 		pr_warn("ddebug boot param string too large\n");
743 		return 0;
744 	}
745 	strlcpy(ddebug_setup_string, str, DDEBUG_STRING_SIZE);
746 	return 1;
747 }
748 
749 __setup("ddebug_query=", ddebug_setup_query);
750 
751 /*
752  * File_ops->write method for <debugfs>/dynamic_debug/control.  Gathers the
753  * command text from userspace, parses and executes it.
754  */
755 #define USER_BUF_PAGE 4096
756 static ssize_t ddebug_proc_write(struct file *file, const char __user *ubuf,
757 				  size_t len, loff_t *offp)
758 {
759 	char *tmpbuf;
760 	int ret;
761 
762 	if (len == 0)
763 		return 0;
764 	if (len > USER_BUF_PAGE - 1) {
765 		pr_warn("expected <%d bytes into control\n", USER_BUF_PAGE);
766 		return -E2BIG;
767 	}
768 	tmpbuf = memdup_user_nul(ubuf, len);
769 	if (IS_ERR(tmpbuf))
770 		return PTR_ERR(tmpbuf);
771 	vpr_info("read %d bytes from userspace\n", (int)len);
772 
773 	ret = ddebug_exec_queries(tmpbuf, NULL);
774 	kfree(tmpbuf);
775 	if (ret < 0)
776 		return ret;
777 
778 	*offp += len;
779 	return len;
780 }
781 
782 /*
783  * Set the iterator to point to the first _ddebug object
784  * and return a pointer to that first object.  Returns
785  * NULL if there are no _ddebugs at all.
786  */
787 static struct _ddebug *ddebug_iter_first(struct ddebug_iter *iter)
788 {
789 	if (list_empty(&ddebug_tables)) {
790 		iter->table = NULL;
791 		iter->idx = 0;
792 		return NULL;
793 	}
794 	iter->table = list_entry(ddebug_tables.next,
795 				 struct ddebug_table, link);
796 	iter->idx = 0;
797 	return &iter->table->ddebugs[iter->idx];
798 }
799 
800 /*
801  * Advance the iterator to point to the next _ddebug
802  * object from the one the iterator currently points at,
803  * and returns a pointer to the new _ddebug.  Returns
804  * NULL if the iterator has seen all the _ddebugs.
805  */
806 static struct _ddebug *ddebug_iter_next(struct ddebug_iter *iter)
807 {
808 	if (iter->table == NULL)
809 		return NULL;
810 	if (++iter->idx == iter->table->num_ddebugs) {
811 		/* iterate to next table */
812 		iter->idx = 0;
813 		if (list_is_last(&iter->table->link, &ddebug_tables)) {
814 			iter->table = NULL;
815 			return NULL;
816 		}
817 		iter->table = list_entry(iter->table->link.next,
818 					 struct ddebug_table, link);
819 	}
820 	return &iter->table->ddebugs[iter->idx];
821 }
822 
823 /*
824  * Seq_ops start method.  Called at the start of every
825  * read() call from userspace.  Takes the ddebug_lock and
826  * seeks the seq_file's iterator to the given position.
827  */
828 static void *ddebug_proc_start(struct seq_file *m, loff_t *pos)
829 {
830 	struct ddebug_iter *iter = m->private;
831 	struct _ddebug *dp;
832 	int n = *pos;
833 
834 	mutex_lock(&ddebug_lock);
835 
836 	if (!n)
837 		return SEQ_START_TOKEN;
838 	if (n < 0)
839 		return NULL;
840 	dp = ddebug_iter_first(iter);
841 	while (dp != NULL && --n > 0)
842 		dp = ddebug_iter_next(iter);
843 	return dp;
844 }
845 
846 /*
847  * Seq_ops next method.  Called several times within a read()
848  * call from userspace, with ddebug_lock held.  Walks to the
849  * next _ddebug object with a special case for the header line.
850  */
851 static void *ddebug_proc_next(struct seq_file *m, void *p, loff_t *pos)
852 {
853 	struct ddebug_iter *iter = m->private;
854 	struct _ddebug *dp;
855 
856 	if (p == SEQ_START_TOKEN)
857 		dp = ddebug_iter_first(iter);
858 	else
859 		dp = ddebug_iter_next(iter);
860 	++*pos;
861 	return dp;
862 }
863 
864 /*
865  * Seq_ops show method.  Called several times within a read()
866  * call from userspace, with ddebug_lock held.  Formats the
867  * current _ddebug as a single human-readable line, with a
868  * special case for the header line.
869  */
870 static int ddebug_proc_show(struct seq_file *m, void *p)
871 {
872 	struct ddebug_iter *iter = m->private;
873 	struct _ddebug *dp = p;
874 	struct flagsbuf flags;
875 
876 	if (p == SEQ_START_TOKEN) {
877 		seq_puts(m,
878 			 "# filename:lineno [module]function flags format\n");
879 		return 0;
880 	}
881 
882 	seq_printf(m, "%s:%u [%s]%s =%s \"",
883 		   trim_prefix(dp->filename), dp->lineno,
884 		   iter->table->mod_name, dp->function,
885 		   ddebug_describe_flags(dp->flags, &flags));
886 	seq_escape(m, dp->format, "\t\r\n\"");
887 	seq_puts(m, "\"\n");
888 
889 	return 0;
890 }
891 
892 /*
893  * Seq_ops stop method.  Called at the end of each read()
894  * call from userspace.  Drops ddebug_lock.
895  */
896 static void ddebug_proc_stop(struct seq_file *m, void *p)
897 {
898 	mutex_unlock(&ddebug_lock);
899 }
900 
901 static const struct seq_operations ddebug_proc_seqops = {
902 	.start = ddebug_proc_start,
903 	.next = ddebug_proc_next,
904 	.show = ddebug_proc_show,
905 	.stop = ddebug_proc_stop
906 };
907 
908 static int ddebug_proc_open(struct inode *inode, struct file *file)
909 {
910 	vpr_info("called\n");
911 	return seq_open_private(file, &ddebug_proc_seqops,
912 				sizeof(struct ddebug_iter));
913 }
914 
915 static const struct file_operations ddebug_proc_fops = {
916 	.owner = THIS_MODULE,
917 	.open = ddebug_proc_open,
918 	.read = seq_read,
919 	.llseek = seq_lseek,
920 	.release = seq_release_private,
921 	.write = ddebug_proc_write
922 };
923 
924 static const struct proc_ops proc_fops = {
925 	.proc_open = ddebug_proc_open,
926 	.proc_read = seq_read,
927 	.proc_lseek = seq_lseek,
928 	.proc_release = seq_release_private,
929 	.proc_write = ddebug_proc_write
930 };
931 
932 /*
933  * Allocate a new ddebug_table for the given module
934  * and add it to the global list.
935  */
936 int ddebug_add_module(struct _ddebug *tab, unsigned int n,
937 			     const char *name)
938 {
939 	struct ddebug_table *dt;
940 
941 	dt = kzalloc(sizeof(*dt), GFP_KERNEL);
942 	if (dt == NULL) {
943 		pr_err("error adding module: %s\n", name);
944 		return -ENOMEM;
945 	}
946 	/*
947 	 * For built-in modules, name lives in .rodata and is
948 	 * immortal. For loaded modules, name points at the name[]
949 	 * member of struct module, which lives at least as long as
950 	 * this struct ddebug_table.
951 	 */
952 	dt->mod_name = name;
953 	dt->num_ddebugs = n;
954 	dt->ddebugs = tab;
955 
956 	mutex_lock(&ddebug_lock);
957 	list_add(&dt->link, &ddebug_tables);
958 	mutex_unlock(&ddebug_lock);
959 
960 	v2pr_info("%3u debug prints in module %s\n", n, dt->mod_name);
961 	return 0;
962 }
963 
964 /* helper for ddebug_dyndbg_(boot|module)_param_cb */
965 static int ddebug_dyndbg_param_cb(char *param, char *val,
966 				const char *modname, int on_err)
967 {
968 	char *sep;
969 
970 	sep = strchr(param, '.');
971 	if (sep) {
972 		/* needed only for ddebug_dyndbg_boot_param_cb */
973 		*sep = '\0';
974 		modname = param;
975 		param = sep + 1;
976 	}
977 	if (strcmp(param, "dyndbg"))
978 		return on_err; /* determined by caller */
979 
980 	ddebug_exec_queries((val ? val : "+p"), modname);
981 
982 	return 0; /* query failure shouldnt stop module load */
983 }
984 
985 /* handle both dyndbg and $module.dyndbg params at boot */
986 static int ddebug_dyndbg_boot_param_cb(char *param, char *val,
987 				const char *unused, void *arg)
988 {
989 	vpr_info("%s=\"%s\"\n", param, val);
990 	return ddebug_dyndbg_param_cb(param, val, NULL, 0);
991 }
992 
993 /*
994  * modprobe foo finds foo.params in boot-args, strips "foo.", and
995  * passes them to load_module().  This callback gets unknown params,
996  * processes dyndbg params, rejects others.
997  */
998 int ddebug_dyndbg_module_param_cb(char *param, char *val, const char *module)
999 {
1000 	vpr_info("module: %s %s=\"%s\"\n", module, param, val);
1001 	return ddebug_dyndbg_param_cb(param, val, module, -ENOENT);
1002 }
1003 
1004 static void ddebug_table_free(struct ddebug_table *dt)
1005 {
1006 	list_del_init(&dt->link);
1007 	kfree(dt);
1008 }
1009 
1010 /*
1011  * Called in response to a module being unloaded.  Removes
1012  * any ddebug_table's which point at the module.
1013  */
1014 int ddebug_remove_module(const char *mod_name)
1015 {
1016 	struct ddebug_table *dt, *nextdt;
1017 	int ret = -ENOENT;
1018 
1019 	v2pr_info("removing module \"%s\"\n", mod_name);
1020 
1021 	mutex_lock(&ddebug_lock);
1022 	list_for_each_entry_safe(dt, nextdt, &ddebug_tables, link) {
1023 		if (dt->mod_name == mod_name) {
1024 			ddebug_table_free(dt);
1025 			ret = 0;
1026 			break;
1027 		}
1028 	}
1029 	mutex_unlock(&ddebug_lock);
1030 	return ret;
1031 }
1032 
1033 static void ddebug_remove_all_tables(void)
1034 {
1035 	mutex_lock(&ddebug_lock);
1036 	while (!list_empty(&ddebug_tables)) {
1037 		struct ddebug_table *dt = list_entry(ddebug_tables.next,
1038 						      struct ddebug_table,
1039 						      link);
1040 		ddebug_table_free(dt);
1041 	}
1042 	mutex_unlock(&ddebug_lock);
1043 }
1044 
1045 static __initdata int ddebug_init_success;
1046 
1047 static int __init dynamic_debug_init_control(void)
1048 {
1049 	struct proc_dir_entry *procfs_dir;
1050 	struct dentry *debugfs_dir;
1051 
1052 	if (!ddebug_init_success)
1053 		return -ENODEV;
1054 
1055 	/* Create the control file in debugfs if it is enabled */
1056 	if (debugfs_initialized()) {
1057 		debugfs_dir = debugfs_create_dir("dynamic_debug", NULL);
1058 		debugfs_create_file("control", 0644, debugfs_dir, NULL,
1059 				    &ddebug_proc_fops);
1060 	}
1061 
1062 	/* Also create the control file in procfs */
1063 	procfs_dir = proc_mkdir("dynamic_debug", NULL);
1064 	if (procfs_dir)
1065 		proc_create("control", 0644, procfs_dir, &proc_fops);
1066 
1067 	return 0;
1068 }
1069 
1070 static int __init dynamic_debug_init(void)
1071 {
1072 	struct _ddebug *iter, *iter_start;
1073 	const char *modname = NULL;
1074 	char *cmdline;
1075 	int ret = 0;
1076 	int n = 0, entries = 0, modct = 0;
1077 
1078 	if (&__start___dyndbg == &__stop___dyndbg) {
1079 		if (IS_ENABLED(CONFIG_DYNAMIC_DEBUG)) {
1080 			pr_warn("_ddebug table is empty in a CONFIG_DYNAMIC_DEBUG build\n");
1081 			return 1;
1082 		}
1083 		pr_info("Ignore empty _ddebug table in a CONFIG_DYNAMIC_DEBUG_CORE build\n");
1084 		ddebug_init_success = 1;
1085 		return 0;
1086 	}
1087 	iter = __start___dyndbg;
1088 	modname = iter->modname;
1089 	iter_start = iter;
1090 	for (; iter < __stop___dyndbg; iter++) {
1091 		entries++;
1092 		if (strcmp(modname, iter->modname)) {
1093 			modct++;
1094 			ret = ddebug_add_module(iter_start, n, modname);
1095 			if (ret)
1096 				goto out_err;
1097 			n = 0;
1098 			modname = iter->modname;
1099 			iter_start = iter;
1100 		}
1101 		n++;
1102 	}
1103 	ret = ddebug_add_module(iter_start, n, modname);
1104 	if (ret)
1105 		goto out_err;
1106 
1107 	ddebug_init_success = 1;
1108 	vpr_info("%d modules, %d entries and %d bytes in ddebug tables, %d bytes in __dyndbg section\n",
1109 		 modct, entries, (int)(modct * sizeof(struct ddebug_table)),
1110 		 (int)(entries * sizeof(struct _ddebug)));
1111 
1112 	/* apply ddebug_query boot param, dont unload tables on err */
1113 	if (ddebug_setup_string[0] != '\0') {
1114 		pr_warn("ddebug_query param name is deprecated, change it to dyndbg\n");
1115 		ret = ddebug_exec_queries(ddebug_setup_string, NULL);
1116 		if (ret < 0)
1117 			pr_warn("Invalid ddebug boot param %s\n",
1118 				ddebug_setup_string);
1119 		else
1120 			pr_info("%d changes by ddebug_query\n", ret);
1121 	}
1122 	/* now that ddebug tables are loaded, process all boot args
1123 	 * again to find and activate queries given in dyndbg params.
1124 	 * While this has already been done for known boot params, it
1125 	 * ignored the unknown ones (dyndbg in particular).  Reusing
1126 	 * parse_args avoids ad-hoc parsing.  This will also attempt
1127 	 * to activate queries for not-yet-loaded modules, which is
1128 	 * slightly noisy if verbose, but harmless.
1129 	 */
1130 	cmdline = kstrdup(saved_command_line, GFP_KERNEL);
1131 	parse_args("dyndbg params", cmdline, NULL,
1132 		   0, 0, 0, NULL, &ddebug_dyndbg_boot_param_cb);
1133 	kfree(cmdline);
1134 	return 0;
1135 
1136 out_err:
1137 	ddebug_remove_all_tables();
1138 	return 0;
1139 }
1140 /* Allow early initialization for boot messages via boot param */
1141 early_initcall(dynamic_debug_init);
1142 
1143 /* Debugfs setup must be done later */
1144 fs_initcall(dynamic_debug_init_control);
1145