xref: /linux-6.15/lib/dynamic_debug.c (revision bfa3ca44)
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 	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 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 	if (modname)
389 		/* support $modname.dyndbg=<multiple queries> */
390 		query->module = modname;
391 
392 	for (i = 0; i < nwords; i += 2) {
393 		char *keyword = words[i];
394 		char *arg = words[i+1];
395 
396 		if (!strcmp(keyword, "func")) {
397 			rc = check_set(&query->function, arg, "func");
398 		} else if (!strcmp(keyword, "file")) {
399 			if (check_set(&query->filename, arg, "file"))
400 				return -EINVAL;
401 
402 			/* tail :$info is function or line-range */
403 			fline = strchr(query->filename, ':');
404 			if (!fline)
405 				continue;
406 			*fline++ = '\0';
407 			if (isalpha(*fline) || *fline == '*' || *fline == '?') {
408 				/* take as function name */
409 				if (check_set(&query->function, fline, "func"))
410 					return -EINVAL;
411 			} else {
412 				if (parse_linerange(query, fline))
413 					return -EINVAL;
414 			}
415 		} else if (!strcmp(keyword, "module")) {
416 			rc = check_set(&query->module, arg, "module");
417 		} else if (!strcmp(keyword, "format")) {
418 			string_unescape_inplace(arg, UNESCAPE_SPACE |
419 							    UNESCAPE_OCTAL |
420 							    UNESCAPE_SPECIAL);
421 			rc = check_set(&query->format, arg, "format");
422 		} else if (!strcmp(keyword, "line")) {
423 			if (parse_linerange(query, arg))
424 				return -EINVAL;
425 		} else {
426 			pr_err("unknown keyword \"%s\"\n", keyword);
427 			return -EINVAL;
428 		}
429 		if (rc)
430 			return rc;
431 	}
432 	vpr_info_dq(query, "parsed");
433 	return 0;
434 }
435 
436 /*
437  * Parse `str' as a flags specification, format [-+=][p]+.
438  * Sets up *maskp and *flagsp to be used when changing the
439  * flags fields of matched _ddebug's.  Returns 0 on success
440  * or <0 on error.
441  */
442 static int ddebug_parse_flags(const char *str, struct flag_settings *modifiers)
443 {
444 	int op, i;
445 
446 	switch (*str) {
447 	case '+':
448 	case '-':
449 	case '=':
450 		op = *str++;
451 		break;
452 	default:
453 		pr_err("bad flag-op %c, at start of %s\n", *str, str);
454 		return -EINVAL;
455 	}
456 	v3pr_info("op='%c'\n", op);
457 
458 	for (; *str ; ++str) {
459 		for (i = ARRAY_SIZE(opt_array) - 1; i >= 0; i--) {
460 			if (*str == opt_array[i].opt_char) {
461 				modifiers->flags |= opt_array[i].flag;
462 				break;
463 			}
464 		}
465 		if (i < 0) {
466 			pr_err("unknown flag '%c'\n", *str);
467 			return -EINVAL;
468 		}
469 	}
470 	v3pr_info("flags=0x%x\n", modifiers->flags);
471 
472 	/* calculate final flags, mask based upon op */
473 	switch (op) {
474 	case '=':
475 		/* modifiers->flags already set */
476 		modifiers->mask = 0;
477 		break;
478 	case '+':
479 		modifiers->mask = ~0U;
480 		break;
481 	case '-':
482 		modifiers->mask = ~modifiers->flags;
483 		modifiers->flags = 0;
484 		break;
485 	}
486 	v3pr_info("*flagsp=0x%x *maskp=0x%x\n", modifiers->flags, modifiers->mask);
487 
488 	return 0;
489 }
490 
491 static int ddebug_exec_query(char *query_string, const char *modname)
492 {
493 	struct flag_settings modifiers = {};
494 	struct ddebug_query query = {};
495 #define MAXWORDS 9
496 	int nwords, nfound;
497 	char *words[MAXWORDS];
498 
499 	nwords = ddebug_tokenize(query_string, words, MAXWORDS);
500 	if (nwords <= 0) {
501 		pr_err("tokenize failed\n");
502 		return -EINVAL;
503 	}
504 	/* check flags 1st (last arg) so query is pairs of spec,val */
505 	if (ddebug_parse_flags(words[nwords-1], &modifiers)) {
506 		pr_err("flags parse failed\n");
507 		return -EINVAL;
508 	}
509 	if (ddebug_parse_query(words, nwords-1, &query, modname)) {
510 		pr_err("query parse failed\n");
511 		return -EINVAL;
512 	}
513 	/* actually go and implement the change */
514 	nfound = ddebug_change(&query, &modifiers);
515 	vpr_info_dq(&query, nfound ? "applied" : "no-match");
516 
517 	return nfound;
518 }
519 
520 /* handle multiple queries in query string, continue on error, return
521    last error or number of matching callsites.  Module name is either
522    in param (for boot arg) or perhaps in query string.
523 */
524 static int ddebug_exec_queries(char *query, const char *modname)
525 {
526 	char *split;
527 	int i, errs = 0, exitcode = 0, rc, nfound = 0;
528 
529 	for (i = 0; query; query = split) {
530 		split = strpbrk(query, ";\n");
531 		if (split)
532 			*split++ = '\0';
533 
534 		query = skip_spaces(query);
535 		if (!query || !*query || *query == '#')
536 			continue;
537 
538 		vpr_info("query %d: \"%s\" mod:%s\n", i, query, modname ?: "*");
539 
540 		rc = ddebug_exec_query(query, modname);
541 		if (rc < 0) {
542 			errs++;
543 			exitcode = rc;
544 		} else {
545 			nfound += rc;
546 		}
547 		i++;
548 	}
549 	if (i)
550 		v2pr_info("processed %d queries, with %d matches, %d errs\n",
551 			 i, nfound, errs);
552 
553 	if (exitcode)
554 		return exitcode;
555 	return nfound;
556 }
557 
558 /**
559  * dynamic_debug_exec_queries - select and change dynamic-debug prints
560  * @query: query-string described in admin-guide/dynamic-debug-howto
561  * @modname: string containing module name, usually &module.mod_name
562  *
563  * This uses the >/proc/dynamic_debug/control reader, allowing module
564  * authors to modify their dynamic-debug callsites. The modname is
565  * canonically struct module.mod_name, but can also be null or a
566  * module-wildcard, for example: "drm*".
567  */
568 int dynamic_debug_exec_queries(const char *query, const char *modname)
569 {
570 	int rc;
571 	char *qry; /* writable copy of query */
572 
573 	if (!query) {
574 		pr_err("non-null query/command string expected\n");
575 		return -EINVAL;
576 	}
577 	qry = kstrndup(query, PAGE_SIZE, GFP_KERNEL);
578 	if (!qry)
579 		return -ENOMEM;
580 
581 	rc = ddebug_exec_queries(qry, modname);
582 	kfree(qry);
583 	return rc;
584 }
585 EXPORT_SYMBOL_GPL(dynamic_debug_exec_queries);
586 
587 #define PREFIX_SIZE 64
588 
589 static int remaining(int wrote)
590 {
591 	if (PREFIX_SIZE - wrote > 0)
592 		return PREFIX_SIZE - wrote;
593 	return 0;
594 }
595 
596 static char *__dynamic_emit_prefix(const struct _ddebug *desc, char *buf)
597 {
598 	int pos_after_tid;
599 	int pos = 0;
600 
601 	if (desc->flags & _DPRINTK_FLAGS_INCL_TID) {
602 		if (in_interrupt())
603 			pos += snprintf(buf + pos, remaining(pos), "<intr> ");
604 		else
605 			pos += snprintf(buf + pos, remaining(pos), "[%d] ",
606 					task_pid_vnr(current));
607 	}
608 	pos_after_tid = pos;
609 	if (desc->flags & _DPRINTK_FLAGS_INCL_MODNAME)
610 		pos += snprintf(buf + pos, remaining(pos), "%s:",
611 				desc->modname);
612 	if (desc->flags & _DPRINTK_FLAGS_INCL_FUNCNAME)
613 		pos += snprintf(buf + pos, remaining(pos), "%s:",
614 				desc->function);
615 	if (desc->flags & _DPRINTK_FLAGS_INCL_LINENO)
616 		pos += snprintf(buf + pos, remaining(pos), "%d:",
617 				desc->lineno);
618 	if (pos - pos_after_tid)
619 		pos += snprintf(buf + pos, remaining(pos), " ");
620 	if (pos >= PREFIX_SIZE)
621 		buf[PREFIX_SIZE - 1] = '\0';
622 
623 	return buf;
624 }
625 
626 static inline char *dynamic_emit_prefix(struct _ddebug *desc, char *buf)
627 {
628 	if (unlikely(desc->flags & _DPRINTK_FLAGS_INCL_ANY))
629 		return __dynamic_emit_prefix(desc, buf);
630 	return buf;
631 }
632 
633 void __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...)
634 {
635 	va_list args;
636 	struct va_format vaf;
637 	char buf[PREFIX_SIZE] = "";
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 	printk(KERN_DEBUG "%s%pV", dynamic_emit_prefix(descriptor, buf), &vaf);
648 
649 	va_end(args);
650 }
651 EXPORT_SYMBOL(__dynamic_pr_debug);
652 
653 void __dynamic_dev_dbg(struct _ddebug *descriptor,
654 		      const struct device *dev, const char *fmt, ...)
655 {
656 	struct va_format vaf;
657 	va_list args;
658 
659 	BUG_ON(!descriptor);
660 	BUG_ON(!fmt);
661 
662 	va_start(args, fmt);
663 
664 	vaf.fmt = fmt;
665 	vaf.va = &args;
666 
667 	if (!dev) {
668 		printk(KERN_DEBUG "(NULL device *): %pV", &vaf);
669 	} else {
670 		char buf[PREFIX_SIZE] = "";
671 
672 		dev_printk_emit(LOGLEVEL_DEBUG, dev, "%s%s %s: %pV",
673 				dynamic_emit_prefix(descriptor, buf),
674 				dev_driver_string(dev), dev_name(dev),
675 				&vaf);
676 	}
677 
678 	va_end(args);
679 }
680 EXPORT_SYMBOL(__dynamic_dev_dbg);
681 
682 #ifdef CONFIG_NET
683 
684 void __dynamic_netdev_dbg(struct _ddebug *descriptor,
685 			  const struct net_device *dev, const char *fmt, ...)
686 {
687 	struct va_format vaf;
688 	va_list args;
689 
690 	BUG_ON(!descriptor);
691 	BUG_ON(!fmt);
692 
693 	va_start(args, fmt);
694 
695 	vaf.fmt = fmt;
696 	vaf.va = &args;
697 
698 	if (dev && dev->dev.parent) {
699 		char buf[PREFIX_SIZE] = "";
700 
701 		dev_printk_emit(LOGLEVEL_DEBUG, dev->dev.parent,
702 				"%s%s %s %s%s: %pV",
703 				dynamic_emit_prefix(descriptor, buf),
704 				dev_driver_string(dev->dev.parent),
705 				dev_name(dev->dev.parent),
706 				netdev_name(dev), netdev_reg_state(dev),
707 				&vaf);
708 	} else if (dev) {
709 		printk(KERN_DEBUG "%s%s: %pV", netdev_name(dev),
710 		       netdev_reg_state(dev), &vaf);
711 	} else {
712 		printk(KERN_DEBUG "(NULL net_device): %pV", &vaf);
713 	}
714 
715 	va_end(args);
716 }
717 EXPORT_SYMBOL(__dynamic_netdev_dbg);
718 
719 #endif
720 
721 #if IS_ENABLED(CONFIG_INFINIBAND)
722 
723 void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
724 			 const struct ib_device *ibdev, const char *fmt, ...)
725 {
726 	struct va_format vaf;
727 	va_list args;
728 
729 	va_start(args, fmt);
730 
731 	vaf.fmt = fmt;
732 	vaf.va = &args;
733 
734 	if (ibdev && ibdev->dev.parent) {
735 		char buf[PREFIX_SIZE] = "";
736 
737 		dev_printk_emit(LOGLEVEL_DEBUG, ibdev->dev.parent,
738 				"%s%s %s %s: %pV",
739 				dynamic_emit_prefix(descriptor, buf),
740 				dev_driver_string(ibdev->dev.parent),
741 				dev_name(ibdev->dev.parent),
742 				dev_name(&ibdev->dev),
743 				&vaf);
744 	} else if (ibdev) {
745 		printk(KERN_DEBUG "%s: %pV", dev_name(&ibdev->dev), &vaf);
746 	} else {
747 		printk(KERN_DEBUG "(NULL ib_device): %pV", &vaf);
748 	}
749 
750 	va_end(args);
751 }
752 EXPORT_SYMBOL(__dynamic_ibdev_dbg);
753 
754 #endif
755 
756 /*
757  * Install a noop handler to make dyndbg look like a normal kernel cli param.
758  * This avoids warnings about dyndbg being an unknown cli param when supplied
759  * by a user.
760  */
761 static __init int dyndbg_setup(char *str)
762 {
763 	return 1;
764 }
765 
766 __setup("dyndbg=", dyndbg_setup);
767 
768 /*
769  * File_ops->write method for <debugfs>/dynamic_debug/control.  Gathers the
770  * command text from userspace, parses and executes it.
771  */
772 #define USER_BUF_PAGE 4096
773 static ssize_t ddebug_proc_write(struct file *file, const char __user *ubuf,
774 				  size_t len, loff_t *offp)
775 {
776 	char *tmpbuf;
777 	int ret;
778 
779 	if (len == 0)
780 		return 0;
781 	if (len > USER_BUF_PAGE - 1) {
782 		pr_warn("expected <%d bytes into control\n", USER_BUF_PAGE);
783 		return -E2BIG;
784 	}
785 	tmpbuf = memdup_user_nul(ubuf, len);
786 	if (IS_ERR(tmpbuf))
787 		return PTR_ERR(tmpbuf);
788 	v2pr_info("read %zu bytes from userspace\n", len);
789 
790 	ret = ddebug_exec_queries(tmpbuf, NULL);
791 	kfree(tmpbuf);
792 	if (ret < 0)
793 		return ret;
794 
795 	*offp += len;
796 	return len;
797 }
798 
799 /*
800  * Set the iterator to point to the first _ddebug object
801  * and return a pointer to that first object.  Returns
802  * NULL if there are no _ddebugs at all.
803  */
804 static struct _ddebug *ddebug_iter_first(struct ddebug_iter *iter)
805 {
806 	if (list_empty(&ddebug_tables)) {
807 		iter->table = NULL;
808 		iter->idx = 0;
809 		return NULL;
810 	}
811 	iter->table = list_entry(ddebug_tables.next,
812 				 struct ddebug_table, link);
813 	iter->idx = 0;
814 	return &iter->table->ddebugs[iter->idx];
815 }
816 
817 /*
818  * Advance the iterator to point to the next _ddebug
819  * object from the one the iterator currently points at,
820  * and returns a pointer to the new _ddebug.  Returns
821  * NULL if the iterator has seen all the _ddebugs.
822  */
823 static struct _ddebug *ddebug_iter_next(struct ddebug_iter *iter)
824 {
825 	if (iter->table == NULL)
826 		return NULL;
827 	if (++iter->idx == iter->table->num_ddebugs) {
828 		/* iterate to next table */
829 		iter->idx = 0;
830 		if (list_is_last(&iter->table->link, &ddebug_tables)) {
831 			iter->table = NULL;
832 			return NULL;
833 		}
834 		iter->table = list_entry(iter->table->link.next,
835 					 struct ddebug_table, link);
836 	}
837 	return &iter->table->ddebugs[iter->idx];
838 }
839 
840 /*
841  * Seq_ops start method.  Called at the start of every
842  * read() call from userspace.  Takes the ddebug_lock and
843  * seeks the seq_file's iterator to the given position.
844  */
845 static void *ddebug_proc_start(struct seq_file *m, loff_t *pos)
846 {
847 	struct ddebug_iter *iter = m->private;
848 	struct _ddebug *dp;
849 	int n = *pos;
850 
851 	mutex_lock(&ddebug_lock);
852 
853 	if (!n)
854 		return SEQ_START_TOKEN;
855 	if (n < 0)
856 		return NULL;
857 	dp = ddebug_iter_first(iter);
858 	while (dp != NULL && --n > 0)
859 		dp = ddebug_iter_next(iter);
860 	return dp;
861 }
862 
863 /*
864  * Seq_ops next method.  Called several times within a read()
865  * call from userspace, with ddebug_lock held.  Walks to the
866  * next _ddebug object with a special case for the header line.
867  */
868 static void *ddebug_proc_next(struct seq_file *m, void *p, loff_t *pos)
869 {
870 	struct ddebug_iter *iter = m->private;
871 	struct _ddebug *dp;
872 
873 	if (p == SEQ_START_TOKEN)
874 		dp = ddebug_iter_first(iter);
875 	else
876 		dp = ddebug_iter_next(iter);
877 	++*pos;
878 	return dp;
879 }
880 
881 /*
882  * Seq_ops show method.  Called several times within a read()
883  * call from userspace, with ddebug_lock held.  Formats the
884  * current _ddebug as a single human-readable line, with a
885  * special case for the header line.
886  */
887 static int ddebug_proc_show(struct seq_file *m, void *p)
888 {
889 	struct ddebug_iter *iter = m->private;
890 	struct _ddebug *dp = p;
891 	struct flagsbuf flags;
892 
893 	if (p == SEQ_START_TOKEN) {
894 		seq_puts(m,
895 			 "# filename:lineno [module]function flags format\n");
896 		return 0;
897 	}
898 
899 	seq_printf(m, "%s:%u [%s]%s =%s \"",
900 		   trim_prefix(dp->filename), dp->lineno,
901 		   iter->table->mod_name, dp->function,
902 		   ddebug_describe_flags(dp->flags, &flags));
903 	seq_escape(m, dp->format, "\t\r\n\"");
904 	seq_puts(m, "\"\n");
905 
906 	return 0;
907 }
908 
909 /*
910  * Seq_ops stop method.  Called at the end of each read()
911  * call from userspace.  Drops ddebug_lock.
912  */
913 static void ddebug_proc_stop(struct seq_file *m, void *p)
914 {
915 	mutex_unlock(&ddebug_lock);
916 }
917 
918 static const struct seq_operations ddebug_proc_seqops = {
919 	.start = ddebug_proc_start,
920 	.next = ddebug_proc_next,
921 	.show = ddebug_proc_show,
922 	.stop = ddebug_proc_stop
923 };
924 
925 static int ddebug_proc_open(struct inode *inode, struct file *file)
926 {
927 	return seq_open_private(file, &ddebug_proc_seqops,
928 				sizeof(struct ddebug_iter));
929 }
930 
931 static const struct file_operations ddebug_proc_fops = {
932 	.owner = THIS_MODULE,
933 	.open = ddebug_proc_open,
934 	.read = seq_read,
935 	.llseek = seq_lseek,
936 	.release = seq_release_private,
937 	.write = ddebug_proc_write
938 };
939 
940 static const struct proc_ops proc_fops = {
941 	.proc_open = ddebug_proc_open,
942 	.proc_read = seq_read,
943 	.proc_lseek = seq_lseek,
944 	.proc_release = seq_release_private,
945 	.proc_write = ddebug_proc_write
946 };
947 
948 /*
949  * Allocate a new ddebug_table for the given module
950  * and add it to the global list.
951  */
952 int ddebug_add_module(struct _ddebug *tab, unsigned int n,
953 			     const char *name)
954 {
955 	struct ddebug_table *dt;
956 
957 	dt = kzalloc(sizeof(*dt), GFP_KERNEL);
958 	if (dt == NULL) {
959 		pr_err("error adding module: %s\n", name);
960 		return -ENOMEM;
961 	}
962 	/*
963 	 * For built-in modules, name lives in .rodata and is
964 	 * immortal. For loaded modules, name points at the name[]
965 	 * member of struct module, which lives at least as long as
966 	 * this struct ddebug_table.
967 	 */
968 	dt->mod_name = name;
969 	dt->num_ddebugs = n;
970 	dt->ddebugs = tab;
971 
972 	mutex_lock(&ddebug_lock);
973 	list_add(&dt->link, &ddebug_tables);
974 	mutex_unlock(&ddebug_lock);
975 
976 	vpr_info("%3u debug prints in module %s\n", n, dt->mod_name);
977 	return 0;
978 }
979 
980 /* helper for ddebug_dyndbg_(boot|module)_param_cb */
981 static int ddebug_dyndbg_param_cb(char *param, char *val,
982 				const char *modname, int on_err)
983 {
984 	char *sep;
985 
986 	sep = strchr(param, '.');
987 	if (sep) {
988 		/* needed only for ddebug_dyndbg_boot_param_cb */
989 		*sep = '\0';
990 		modname = param;
991 		param = sep + 1;
992 	}
993 	if (strcmp(param, "dyndbg"))
994 		return on_err; /* determined by caller */
995 
996 	ddebug_exec_queries((val ? val : "+p"), modname);
997 
998 	return 0; /* query failure shouldn't stop module load */
999 }
1000 
1001 /* handle both dyndbg and $module.dyndbg params at boot */
1002 static int ddebug_dyndbg_boot_param_cb(char *param, char *val,
1003 				const char *unused, void *arg)
1004 {
1005 	vpr_info("%s=\"%s\"\n", param, val);
1006 	return ddebug_dyndbg_param_cb(param, val, NULL, 0);
1007 }
1008 
1009 /*
1010  * modprobe foo finds foo.params in boot-args, strips "foo.", and
1011  * passes them to load_module().  This callback gets unknown params,
1012  * processes dyndbg params, rejects others.
1013  */
1014 int ddebug_dyndbg_module_param_cb(char *param, char *val, const char *module)
1015 {
1016 	vpr_info("module: %s %s=\"%s\"\n", module, param, val);
1017 	return ddebug_dyndbg_param_cb(param, val, module, -ENOENT);
1018 }
1019 
1020 static void ddebug_table_free(struct ddebug_table *dt)
1021 {
1022 	list_del_init(&dt->link);
1023 	kfree(dt);
1024 }
1025 
1026 /*
1027  * Called in response to a module being unloaded.  Removes
1028  * any ddebug_table's which point at the module.
1029  */
1030 int ddebug_remove_module(const char *mod_name)
1031 {
1032 	struct ddebug_table *dt, *nextdt;
1033 	int ret = -ENOENT;
1034 
1035 	mutex_lock(&ddebug_lock);
1036 	list_for_each_entry_safe(dt, nextdt, &ddebug_tables, link) {
1037 		if (dt->mod_name == mod_name) {
1038 			ddebug_table_free(dt);
1039 			ret = 0;
1040 			break;
1041 		}
1042 	}
1043 	mutex_unlock(&ddebug_lock);
1044 	if (!ret)
1045 		v2pr_info("removed module \"%s\"\n", mod_name);
1046 	return ret;
1047 }
1048 
1049 static void ddebug_remove_all_tables(void)
1050 {
1051 	mutex_lock(&ddebug_lock);
1052 	while (!list_empty(&ddebug_tables)) {
1053 		struct ddebug_table *dt = list_entry(ddebug_tables.next,
1054 						      struct ddebug_table,
1055 						      link);
1056 		ddebug_table_free(dt);
1057 	}
1058 	mutex_unlock(&ddebug_lock);
1059 }
1060 
1061 static __initdata int ddebug_init_success;
1062 
1063 static int __init dynamic_debug_init_control(void)
1064 {
1065 	struct proc_dir_entry *procfs_dir;
1066 	struct dentry *debugfs_dir;
1067 
1068 	if (!ddebug_init_success)
1069 		return -ENODEV;
1070 
1071 	/* Create the control file in debugfs if it is enabled */
1072 	if (debugfs_initialized()) {
1073 		debugfs_dir = debugfs_create_dir("dynamic_debug", NULL);
1074 		debugfs_create_file("control", 0644, debugfs_dir, NULL,
1075 				    &ddebug_proc_fops);
1076 	}
1077 
1078 	/* Also create the control file in procfs */
1079 	procfs_dir = proc_mkdir("dynamic_debug", NULL);
1080 	if (procfs_dir)
1081 		proc_create("control", 0644, procfs_dir, &proc_fops);
1082 
1083 	return 0;
1084 }
1085 
1086 static int __init dynamic_debug_init(void)
1087 {
1088 	struct _ddebug *iter, *iter_start;
1089 	const char *modname = NULL;
1090 	char *cmdline;
1091 	int ret = 0;
1092 	int n = 0, entries = 0, modct = 0;
1093 
1094 	if (&__start___dyndbg == &__stop___dyndbg) {
1095 		if (IS_ENABLED(CONFIG_DYNAMIC_DEBUG)) {
1096 			pr_warn("_ddebug table is empty in a CONFIG_DYNAMIC_DEBUG build\n");
1097 			return 1;
1098 		}
1099 		pr_info("Ignore empty _ddebug table in a CONFIG_DYNAMIC_DEBUG_CORE build\n");
1100 		ddebug_init_success = 1;
1101 		return 0;
1102 	}
1103 	iter = __start___dyndbg;
1104 	modname = iter->modname;
1105 	iter_start = iter;
1106 	for (; iter < __stop___dyndbg; iter++) {
1107 		entries++;
1108 		if (strcmp(modname, iter->modname)) {
1109 			modct++;
1110 			ret = ddebug_add_module(iter_start, n, modname);
1111 			if (ret)
1112 				goto out_err;
1113 			n = 0;
1114 			modname = iter->modname;
1115 			iter_start = iter;
1116 		}
1117 		n++;
1118 	}
1119 	ret = ddebug_add_module(iter_start, n, modname);
1120 	if (ret)
1121 		goto out_err;
1122 
1123 	ddebug_init_success = 1;
1124 	vpr_info("%d prdebugs in %d modules, %d KiB in ddebug tables, %d kiB in __dyndbg section\n",
1125 		 entries, modct, (int)((modct * sizeof(struct ddebug_table)) >> 10),
1126 		 (int)((entries * sizeof(struct _ddebug)) >> 10));
1127 
1128 	/* now that ddebug tables are loaded, process all boot args
1129 	 * again to find and activate queries given in dyndbg params.
1130 	 * While this has already been done for known boot params, it
1131 	 * ignored the unknown ones (dyndbg in particular).  Reusing
1132 	 * parse_args avoids ad-hoc parsing.  This will also attempt
1133 	 * to activate queries for not-yet-loaded modules, which is
1134 	 * slightly noisy if verbose, but harmless.
1135 	 */
1136 	cmdline = kstrdup(saved_command_line, GFP_KERNEL);
1137 	parse_args("dyndbg params", cmdline, NULL,
1138 		   0, 0, 0, NULL, &ddebug_dyndbg_boot_param_cb);
1139 	kfree(cmdline);
1140 	return 0;
1141 
1142 out_err:
1143 	ddebug_remove_all_tables();
1144 	return 0;
1145 }
1146 /* Allow early initialization for boot messages via boot param */
1147 early_initcall(dynamic_debug_init);
1148 
1149 /* Debugfs setup must be done later */
1150 fs_initcall(dynamic_debug_init_control);
1151