xref: /linux-6.15/lib/dynamic_debug.c (revision e75ef56f)
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 /**
562  * dynamic_debug_exec_queries - select and change dynamic-debug prints
563  * @query: query-string described in admin-guide/dynamic-debug-howto
564  * @modname: string containing module name, usually &module.mod_name
565  *
566  * This uses the >/proc/dynamic_debug/control reader, allowing module
567  * authors to modify their dynamic-debug callsites. The modname is
568  * canonically struct module.mod_name, but can also be null or a
569  * module-wildcard, for example: "drm*".
570  */
571 int dynamic_debug_exec_queries(const char *query, const char *modname)
572 {
573 	int rc;
574 	char *qry; /* writable copy of query */
575 
576 	if (!query) {
577 		pr_err("non-null query/command string expected\n");
578 		return -EINVAL;
579 	}
580 	qry = kstrndup(query, PAGE_SIZE, GFP_KERNEL);
581 	if (!qry)
582 		return -ENOMEM;
583 
584 	rc = ddebug_exec_queries(qry, modname);
585 	kfree(qry);
586 	return rc;
587 }
588 EXPORT_SYMBOL_GPL(dynamic_debug_exec_queries);
589 
590 #define PREFIX_SIZE 64
591 
592 static int remaining(int wrote)
593 {
594 	if (PREFIX_SIZE - wrote > 0)
595 		return PREFIX_SIZE - wrote;
596 	return 0;
597 }
598 
599 static char *__dynamic_emit_prefix(const struct _ddebug *desc, char *buf)
600 {
601 	int pos_after_tid;
602 	int pos = 0;
603 
604 	if (desc->flags & _DPRINTK_FLAGS_INCL_TID) {
605 		if (in_interrupt())
606 			pos += snprintf(buf + pos, remaining(pos), "<intr> ");
607 		else
608 			pos += snprintf(buf + pos, remaining(pos), "[%d] ",
609 					task_pid_vnr(current));
610 	}
611 	pos_after_tid = pos;
612 	if (desc->flags & _DPRINTK_FLAGS_INCL_MODNAME)
613 		pos += snprintf(buf + pos, remaining(pos), "%s:",
614 				desc->modname);
615 	if (desc->flags & _DPRINTK_FLAGS_INCL_FUNCNAME)
616 		pos += snprintf(buf + pos, remaining(pos), "%s:",
617 				desc->function);
618 	if (desc->flags & _DPRINTK_FLAGS_INCL_LINENO)
619 		pos += snprintf(buf + pos, remaining(pos), "%d:",
620 				desc->lineno);
621 	if (pos - pos_after_tid)
622 		pos += snprintf(buf + pos, remaining(pos), " ");
623 	if (pos >= PREFIX_SIZE)
624 		buf[PREFIX_SIZE - 1] = '\0';
625 
626 	return buf;
627 }
628 
629 static inline char *dynamic_emit_prefix(struct _ddebug *desc, char *buf)
630 {
631 	if (unlikely(desc->flags & _DPRINTK_FLAGS_INCL_ANY))
632 		return __dynamic_emit_prefix(desc, buf);
633 	return buf;
634 }
635 
636 void __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...)
637 {
638 	va_list args;
639 	struct va_format vaf;
640 	char buf[PREFIX_SIZE] = "";
641 
642 	BUG_ON(!descriptor);
643 	BUG_ON(!fmt);
644 
645 	va_start(args, fmt);
646 
647 	vaf.fmt = fmt;
648 	vaf.va = &args;
649 
650 	printk(KERN_DEBUG "%s%pV", dynamic_emit_prefix(descriptor, buf), &vaf);
651 
652 	va_end(args);
653 }
654 EXPORT_SYMBOL(__dynamic_pr_debug);
655 
656 void __dynamic_dev_dbg(struct _ddebug *descriptor,
657 		      const struct device *dev, const char *fmt, ...)
658 {
659 	struct va_format vaf;
660 	va_list args;
661 
662 	BUG_ON(!descriptor);
663 	BUG_ON(!fmt);
664 
665 	va_start(args, fmt);
666 
667 	vaf.fmt = fmt;
668 	vaf.va = &args;
669 
670 	if (!dev) {
671 		printk(KERN_DEBUG "(NULL device *): %pV", &vaf);
672 	} else {
673 		char buf[PREFIX_SIZE] = "";
674 
675 		dev_printk_emit(LOGLEVEL_DEBUG, dev, "%s%s %s: %pV",
676 				dynamic_emit_prefix(descriptor, buf),
677 				dev_driver_string(dev), dev_name(dev),
678 				&vaf);
679 	}
680 
681 	va_end(args);
682 }
683 EXPORT_SYMBOL(__dynamic_dev_dbg);
684 
685 #ifdef CONFIG_NET
686 
687 void __dynamic_netdev_dbg(struct _ddebug *descriptor,
688 			  const struct net_device *dev, const char *fmt, ...)
689 {
690 	struct va_format vaf;
691 	va_list args;
692 
693 	BUG_ON(!descriptor);
694 	BUG_ON(!fmt);
695 
696 	va_start(args, fmt);
697 
698 	vaf.fmt = fmt;
699 	vaf.va = &args;
700 
701 	if (dev && dev->dev.parent) {
702 		char buf[PREFIX_SIZE] = "";
703 
704 		dev_printk_emit(LOGLEVEL_DEBUG, dev->dev.parent,
705 				"%s%s %s %s%s: %pV",
706 				dynamic_emit_prefix(descriptor, buf),
707 				dev_driver_string(dev->dev.parent),
708 				dev_name(dev->dev.parent),
709 				netdev_name(dev), netdev_reg_state(dev),
710 				&vaf);
711 	} else if (dev) {
712 		printk(KERN_DEBUG "%s%s: %pV", netdev_name(dev),
713 		       netdev_reg_state(dev), &vaf);
714 	} else {
715 		printk(KERN_DEBUG "(NULL net_device): %pV", &vaf);
716 	}
717 
718 	va_end(args);
719 }
720 EXPORT_SYMBOL(__dynamic_netdev_dbg);
721 
722 #endif
723 
724 #if IS_ENABLED(CONFIG_INFINIBAND)
725 
726 void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
727 			 const struct ib_device *ibdev, const char *fmt, ...)
728 {
729 	struct va_format vaf;
730 	va_list args;
731 
732 	va_start(args, fmt);
733 
734 	vaf.fmt = fmt;
735 	vaf.va = &args;
736 
737 	if (ibdev && ibdev->dev.parent) {
738 		char buf[PREFIX_SIZE] = "";
739 
740 		dev_printk_emit(LOGLEVEL_DEBUG, ibdev->dev.parent,
741 				"%s%s %s %s: %pV",
742 				dynamic_emit_prefix(descriptor, buf),
743 				dev_driver_string(ibdev->dev.parent),
744 				dev_name(ibdev->dev.parent),
745 				dev_name(&ibdev->dev),
746 				&vaf);
747 	} else if (ibdev) {
748 		printk(KERN_DEBUG "%s: %pV", dev_name(&ibdev->dev), &vaf);
749 	} else {
750 		printk(KERN_DEBUG "(NULL ib_device): %pV", &vaf);
751 	}
752 
753 	va_end(args);
754 }
755 EXPORT_SYMBOL(__dynamic_ibdev_dbg);
756 
757 #endif
758 
759 /*
760  * Install a noop handler to make dyndbg look like a normal kernel cli param.
761  * This avoids warnings about dyndbg being an unknown cli param when supplied
762  * by a user.
763  */
764 static __init int dyndbg_setup(char *str)
765 {
766 	return 1;
767 }
768 
769 __setup("dyndbg=", dyndbg_setup);
770 
771 /*
772  * File_ops->write method for <debugfs>/dynamic_debug/control.  Gathers the
773  * command text from userspace, parses and executes it.
774  */
775 #define USER_BUF_PAGE 4096
776 static ssize_t ddebug_proc_write(struct file *file, const char __user *ubuf,
777 				  size_t len, loff_t *offp)
778 {
779 	char *tmpbuf;
780 	int ret;
781 
782 	if (len == 0)
783 		return 0;
784 	if (len > USER_BUF_PAGE - 1) {
785 		pr_warn("expected <%d bytes into control\n", USER_BUF_PAGE);
786 		return -E2BIG;
787 	}
788 	tmpbuf = memdup_user_nul(ubuf, len);
789 	if (IS_ERR(tmpbuf))
790 		return PTR_ERR(tmpbuf);
791 	v2pr_info("read %zu bytes from userspace\n", len);
792 
793 	ret = ddebug_exec_queries(tmpbuf, NULL);
794 	kfree(tmpbuf);
795 	if (ret < 0)
796 		return ret;
797 
798 	*offp += len;
799 	return len;
800 }
801 
802 /*
803  * Set the iterator to point to the first _ddebug object
804  * and return a pointer to that first object.  Returns
805  * NULL if there are no _ddebugs at all.
806  */
807 static struct _ddebug *ddebug_iter_first(struct ddebug_iter *iter)
808 {
809 	if (list_empty(&ddebug_tables)) {
810 		iter->table = NULL;
811 		return NULL;
812 	}
813 	iter->table = list_entry(ddebug_tables.next,
814 				 struct ddebug_table, link);
815 	iter->idx = iter->table->num_ddebugs;
816 	return &iter->table->ddebugs[--iter->idx];
817 }
818 
819 /*
820  * Advance the iterator to point to the next _ddebug
821  * object from the one the iterator currently points at,
822  * and returns a pointer to the new _ddebug.  Returns
823  * NULL if the iterator has seen all the _ddebugs.
824  */
825 static struct _ddebug *ddebug_iter_next(struct ddebug_iter *iter)
826 {
827 	if (iter->table == NULL)
828 		return NULL;
829 	if (--iter->idx < 0) {
830 		/* iterate to next table */
831 		if (list_is_last(&iter->table->link, &ddebug_tables)) {
832 			iter->table = NULL;
833 			return NULL;
834 		}
835 		iter->table = list_entry(iter->table->link.next,
836 					 struct ddebug_table, link);
837 		iter->idx = iter->table->num_ddebugs;
838 		--iter->idx;
839 	}
840 	return &iter->table->ddebugs[iter->idx];
841 }
842 
843 /*
844  * Seq_ops start method.  Called at the start of every
845  * read() call from userspace.  Takes the ddebug_lock and
846  * seeks the seq_file's iterator to the given position.
847  */
848 static void *ddebug_proc_start(struct seq_file *m, loff_t *pos)
849 {
850 	struct ddebug_iter *iter = m->private;
851 	struct _ddebug *dp;
852 	int n = *pos;
853 
854 	mutex_lock(&ddebug_lock);
855 
856 	if (!n)
857 		return SEQ_START_TOKEN;
858 	if (n < 0)
859 		return NULL;
860 	dp = ddebug_iter_first(iter);
861 	while (dp != NULL && --n > 0)
862 		dp = ddebug_iter_next(iter);
863 	return dp;
864 }
865 
866 /*
867  * Seq_ops next method.  Called several times within a read()
868  * call from userspace, with ddebug_lock held.  Walks to the
869  * next _ddebug object with a special case for the header line.
870  */
871 static void *ddebug_proc_next(struct seq_file *m, void *p, loff_t *pos)
872 {
873 	struct ddebug_iter *iter = m->private;
874 	struct _ddebug *dp;
875 
876 	if (p == SEQ_START_TOKEN)
877 		dp = ddebug_iter_first(iter);
878 	else
879 		dp = ddebug_iter_next(iter);
880 	++*pos;
881 	return dp;
882 }
883 
884 /*
885  * Seq_ops show method.  Called several times within a read()
886  * call from userspace, with ddebug_lock held.  Formats the
887  * current _ddebug as a single human-readable line, with a
888  * special case for the header line.
889  */
890 static int ddebug_proc_show(struct seq_file *m, void *p)
891 {
892 	struct ddebug_iter *iter = m->private;
893 	struct _ddebug *dp = p;
894 	struct flagsbuf flags;
895 
896 	if (p == SEQ_START_TOKEN) {
897 		seq_puts(m,
898 			 "# filename:lineno [module]function flags format\n");
899 		return 0;
900 	}
901 
902 	seq_printf(m, "%s:%u [%s]%s =%s \"",
903 		   trim_prefix(dp->filename), dp->lineno,
904 		   iter->table->mod_name, dp->function,
905 		   ddebug_describe_flags(dp->flags, &flags));
906 	seq_escape_str(m, dp->format, ESCAPE_SPACE, "\t\r\n\"");
907 	seq_puts(m, "\"\n");
908 
909 	return 0;
910 }
911 
912 /*
913  * Seq_ops stop method.  Called at the end of each read()
914  * call from userspace.  Drops ddebug_lock.
915  */
916 static void ddebug_proc_stop(struct seq_file *m, void *p)
917 {
918 	mutex_unlock(&ddebug_lock);
919 }
920 
921 static const struct seq_operations ddebug_proc_seqops = {
922 	.start = ddebug_proc_start,
923 	.next = ddebug_proc_next,
924 	.show = ddebug_proc_show,
925 	.stop = ddebug_proc_stop
926 };
927 
928 static int ddebug_proc_open(struct inode *inode, struct file *file)
929 {
930 	return seq_open_private(file, &ddebug_proc_seqops,
931 				sizeof(struct ddebug_iter));
932 }
933 
934 static const struct file_operations ddebug_proc_fops = {
935 	.owner = THIS_MODULE,
936 	.open = ddebug_proc_open,
937 	.read = seq_read,
938 	.llseek = seq_lseek,
939 	.release = seq_release_private,
940 	.write = ddebug_proc_write
941 };
942 
943 static const struct proc_ops proc_fops = {
944 	.proc_open = ddebug_proc_open,
945 	.proc_read = seq_read,
946 	.proc_lseek = seq_lseek,
947 	.proc_release = seq_release_private,
948 	.proc_write = ddebug_proc_write
949 };
950 
951 /*
952  * Allocate a new ddebug_table for the given module
953  * and add it to the global list.
954  */
955 int ddebug_add_module(struct _ddebug *tab, unsigned int n,
956 			     const char *name)
957 {
958 	struct ddebug_table *dt;
959 
960 	dt = kzalloc(sizeof(*dt), GFP_KERNEL);
961 	if (dt == NULL) {
962 		pr_err("error adding module: %s\n", name);
963 		return -ENOMEM;
964 	}
965 	/*
966 	 * For built-in modules, name lives in .rodata and is
967 	 * immortal. For loaded modules, name points at the name[]
968 	 * member of struct module, which lives at least as long as
969 	 * this struct ddebug_table.
970 	 */
971 	dt->mod_name = name;
972 	dt->num_ddebugs = n;
973 	dt->ddebugs = tab;
974 
975 	mutex_lock(&ddebug_lock);
976 	list_add_tail(&dt->link, &ddebug_tables);
977 	mutex_unlock(&ddebug_lock);
978 
979 	vpr_info("%3u debug prints in module %s\n", n, dt->mod_name);
980 	return 0;
981 }
982 
983 /* helper for ddebug_dyndbg_(boot|module)_param_cb */
984 static int ddebug_dyndbg_param_cb(char *param, char *val,
985 				const char *modname, int on_err)
986 {
987 	char *sep;
988 
989 	sep = strchr(param, '.');
990 	if (sep) {
991 		/* needed only for ddebug_dyndbg_boot_param_cb */
992 		*sep = '\0';
993 		modname = param;
994 		param = sep + 1;
995 	}
996 	if (strcmp(param, "dyndbg"))
997 		return on_err; /* determined by caller */
998 
999 	ddebug_exec_queries((val ? val : "+p"), modname);
1000 
1001 	return 0; /* query failure shouldn't stop module load */
1002 }
1003 
1004 /* handle both dyndbg and $module.dyndbg params at boot */
1005 static int ddebug_dyndbg_boot_param_cb(char *param, char *val,
1006 				const char *unused, void *arg)
1007 {
1008 	vpr_info("%s=\"%s\"\n", param, val);
1009 	return ddebug_dyndbg_param_cb(param, val, NULL, 0);
1010 }
1011 
1012 /*
1013  * modprobe foo finds foo.params in boot-args, strips "foo.", and
1014  * passes them to load_module().  This callback gets unknown params,
1015  * processes dyndbg params, rejects others.
1016  */
1017 int ddebug_dyndbg_module_param_cb(char *param, char *val, const char *module)
1018 {
1019 	vpr_info("module: %s %s=\"%s\"\n", module, param, val);
1020 	return ddebug_dyndbg_param_cb(param, val, module, -ENOENT);
1021 }
1022 
1023 static void ddebug_table_free(struct ddebug_table *dt)
1024 {
1025 	list_del_init(&dt->link);
1026 	kfree(dt);
1027 }
1028 
1029 /*
1030  * Called in response to a module being unloaded.  Removes
1031  * any ddebug_table's which point at the module.
1032  */
1033 int ddebug_remove_module(const char *mod_name)
1034 {
1035 	struct ddebug_table *dt, *nextdt;
1036 	int ret = -ENOENT;
1037 
1038 	mutex_lock(&ddebug_lock);
1039 	list_for_each_entry_safe(dt, nextdt, &ddebug_tables, link) {
1040 		if (dt->mod_name == mod_name) {
1041 			ddebug_table_free(dt);
1042 			ret = 0;
1043 			break;
1044 		}
1045 	}
1046 	mutex_unlock(&ddebug_lock);
1047 	if (!ret)
1048 		v2pr_info("removed module \"%s\"\n", mod_name);
1049 	return ret;
1050 }
1051 
1052 static void ddebug_remove_all_tables(void)
1053 {
1054 	mutex_lock(&ddebug_lock);
1055 	while (!list_empty(&ddebug_tables)) {
1056 		struct ddebug_table *dt = list_entry(ddebug_tables.next,
1057 						      struct ddebug_table,
1058 						      link);
1059 		ddebug_table_free(dt);
1060 	}
1061 	mutex_unlock(&ddebug_lock);
1062 }
1063 
1064 static __initdata int ddebug_init_success;
1065 
1066 static int __init dynamic_debug_init_control(void)
1067 {
1068 	struct proc_dir_entry *procfs_dir;
1069 	struct dentry *debugfs_dir;
1070 
1071 	if (!ddebug_init_success)
1072 		return -ENODEV;
1073 
1074 	/* Create the control file in debugfs if it is enabled */
1075 	if (debugfs_initialized()) {
1076 		debugfs_dir = debugfs_create_dir("dynamic_debug", NULL);
1077 		debugfs_create_file("control", 0644, debugfs_dir, NULL,
1078 				    &ddebug_proc_fops);
1079 	}
1080 
1081 	/* Also create the control file in procfs */
1082 	procfs_dir = proc_mkdir("dynamic_debug", NULL);
1083 	if (procfs_dir)
1084 		proc_create("control", 0644, procfs_dir, &proc_fops);
1085 
1086 	return 0;
1087 }
1088 
1089 static int __init dynamic_debug_init(void)
1090 {
1091 	struct _ddebug *iter, *iter_start;
1092 	const char *modname = NULL;
1093 	char *cmdline;
1094 	int ret = 0;
1095 	int n = 0, entries = 0, modct = 0;
1096 
1097 	if (&__start___dyndbg == &__stop___dyndbg) {
1098 		if (IS_ENABLED(CONFIG_DYNAMIC_DEBUG)) {
1099 			pr_warn("_ddebug table is empty in a CONFIG_DYNAMIC_DEBUG build\n");
1100 			return 1;
1101 		}
1102 		pr_info("Ignore empty _ddebug table in a CONFIG_DYNAMIC_DEBUG_CORE build\n");
1103 		ddebug_init_success = 1;
1104 		return 0;
1105 	}
1106 	iter = __start___dyndbg;
1107 	modname = iter->modname;
1108 	iter_start = iter;
1109 	for (; iter < __stop___dyndbg; iter++) {
1110 		entries++;
1111 		if (strcmp(modname, iter->modname)) {
1112 			modct++;
1113 			ret = ddebug_add_module(iter_start, n, modname);
1114 			if (ret)
1115 				goto out_err;
1116 			n = 0;
1117 			modname = iter->modname;
1118 			iter_start = iter;
1119 		}
1120 		n++;
1121 	}
1122 	ret = ddebug_add_module(iter_start, n, modname);
1123 	if (ret)
1124 		goto out_err;
1125 
1126 	ddebug_init_success = 1;
1127 	vpr_info("%d prdebugs in %d modules, %d KiB in ddebug tables, %d kiB in __dyndbg section\n",
1128 		 entries, modct, (int)((modct * sizeof(struct ddebug_table)) >> 10),
1129 		 (int)((entries * sizeof(struct _ddebug)) >> 10));
1130 
1131 	/* now that ddebug tables are loaded, process all boot args
1132 	 * again to find and activate queries given in dyndbg params.
1133 	 * While this has already been done for known boot params, it
1134 	 * ignored the unknown ones (dyndbg in particular).  Reusing
1135 	 * parse_args avoids ad-hoc parsing.  This will also attempt
1136 	 * to activate queries for not-yet-loaded modules, which is
1137 	 * slightly noisy if verbose, but harmless.
1138 	 */
1139 	cmdline = kstrdup(saved_command_line, GFP_KERNEL);
1140 	parse_args("dyndbg params", cmdline, NULL,
1141 		   0, 0, 0, NULL, &ddebug_dyndbg_boot_param_cb);
1142 	kfree(cmdline);
1143 	return 0;
1144 
1145 out_err:
1146 	ddebug_remove_all_tables();
1147 	return 0;
1148 }
1149 /* Allow early initialization for boot messages via boot param */
1150 early_initcall(dynamic_debug_init);
1151 
1152 /* Debugfs setup must be done later */
1153 fs_initcall(dynamic_debug_init_control);
1154