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