xref: /linux/lib/dynamic_debug.c (revision 72bea132f3680ee51e7ed2cee62892b6f5121909)
1 /*
2  * lib/dynamic_debug.c
3  *
4  * make pr_debug()/dev_dbg() calls runtime configurable based upon their
5  * source module.
6  *
7  * Copyright (C) 2008 Jason Baron <jbaron@redhat.com>
8  * By Greg Banks <gnb@melbourne.sgi.com>
9  * Copyright (c) 2008 Silicon Graphics Inc.  All Rights Reserved.
10  * Copyright (C) 2011 Bart Van Assche.  All Rights Reserved.
11  * Copyright (C) 2013 Du, Changbin <changbin.du@gmail.com>
12  */
13 
14 #define pr_fmt(fmt) "dyndbg: " fmt
15 
16 #include <linux/kernel.h>
17 #include <linux/module.h>
18 #include <linux/moduleparam.h>
19 #include <linux/kallsyms.h>
20 #include <linux/types.h>
21 #include <linux/mutex.h>
22 #include <linux/proc_fs.h>
23 #include <linux/seq_file.h>
24 #include <linux/list.h>
25 #include <linux/sysctl.h>
26 #include <linux/ctype.h>
27 #include <linux/string.h>
28 #include <linux/parser.h>
29 #include <linux/string_helpers.h>
30 #include <linux/uaccess.h>
31 #include <linux/dynamic_debug.h>
32 #include <linux/debugfs.h>
33 #include <linux/slab.h>
34 #include <linux/jump_label.h>
35 #include <linux/hardirq.h>
36 #include <linux/sched.h>
37 #include <linux/device.h>
38 #include <linux/netdevice.h>
39 
40 #include <rdma/ib_verbs.h>
41 
42 extern struct _ddebug __start___dyndbg[];
43 extern struct _ddebug __stop___dyndbg[];
44 extern struct ddebug_class_map __start___dyndbg_classes[];
45 extern struct ddebug_class_map __stop___dyndbg_classes[];
46 
47 struct ddebug_table {
48 	struct list_head link, maps;
49 	const char *mod_name;
50 	unsigned int num_ddebugs;
51 	struct _ddebug *ddebugs;
52 };
53 
54 struct ddebug_query {
55 	const char *filename;
56 	const char *module;
57 	const char *function;
58 	const char *format;
59 	const char *class_string;
60 	unsigned int first_lineno, last_lineno;
61 };
62 
63 struct ddebug_iter {
64 	struct ddebug_table *table;
65 	int idx;
66 };
67 
68 struct flag_settings {
69 	unsigned int flags;
70 	unsigned int mask;
71 };
72 
73 static DEFINE_MUTEX(ddebug_lock);
74 static LIST_HEAD(ddebug_tables);
75 static int verbose;
76 module_param(verbose, int, 0644);
77 MODULE_PARM_DESC(verbose, " dynamic_debug/control processing "
78 		 "( 0 = off (default), 1 = module add/rm, 2 = >control summary, 3 = parsing, 4 = per-site changes)");
79 
80 /* Return the path relative to source root */
81 static inline const char *trim_prefix(const char *path)
82 {
83 	int skip = strlen(__FILE__) - strlen("lib/dynamic_debug.c");
84 
85 	if (strncmp(path, __FILE__, skip))
86 		skip = 0; /* prefix mismatch, don't skip */
87 
88 	return path + skip;
89 }
90 
91 static const struct { unsigned flag:8; char opt_char; } opt_array[] = {
92 	{ _DPRINTK_FLAGS_PRINT, 'p' },
93 	{ _DPRINTK_FLAGS_INCL_MODNAME, 'm' },
94 	{ _DPRINTK_FLAGS_INCL_FUNCNAME, 'f' },
95 	{ _DPRINTK_FLAGS_INCL_SOURCENAME, 's' },
96 	{ _DPRINTK_FLAGS_INCL_LINENO, 'l' },
97 	{ _DPRINTK_FLAGS_INCL_TID, 't' },
98 	{ _DPRINTK_FLAGS_NONE, '_' },
99 };
100 
101 struct flagsbuf { char buf[ARRAY_SIZE(opt_array)+1]; };
102 
103 /* format a string into buf[] which describes the _ddebug's flags */
104 static char *ddebug_describe_flags(unsigned int flags, struct flagsbuf *fb)
105 {
106 	char *p = fb->buf;
107 	int i;
108 
109 	for (i = 0; i < ARRAY_SIZE(opt_array); ++i)
110 		if (flags & opt_array[i].flag)
111 			*p++ = opt_array[i].opt_char;
112 	if (p == fb->buf)
113 		*p++ = '_';
114 	*p = '\0';
115 
116 	return fb->buf;
117 }
118 
119 #define vnpr_info(lvl, fmt, ...)				\
120 do {								\
121 	if (verbose >= lvl)					\
122 		pr_info(fmt, ##__VA_ARGS__);			\
123 } while (0)
124 
125 #define vpr_info(fmt, ...)	vnpr_info(1, fmt, ##__VA_ARGS__)
126 #define v2pr_info(fmt, ...)	vnpr_info(2, fmt, ##__VA_ARGS__)
127 #define v3pr_info(fmt, ...)	vnpr_info(3, fmt, ##__VA_ARGS__)
128 #define v4pr_info(fmt, ...)	vnpr_info(4, fmt, ##__VA_ARGS__)
129 
130 static void vpr_info_dq(const struct ddebug_query *query, const char *msg)
131 {
132 	/* trim any trailing newlines */
133 	int fmtlen = 0;
134 
135 	if (query->format) {
136 		fmtlen = strlen(query->format);
137 		while (fmtlen && query->format[fmtlen - 1] == '\n')
138 			fmtlen--;
139 	}
140 
141 	v3pr_info("%s: func=\"%s\" file=\"%s\" module=\"%s\" format=\"%.*s\" lineno=%u-%u class=%s\n",
142 		  msg,
143 		  query->function ?: "",
144 		  query->filename ?: "",
145 		  query->module ?: "",
146 		  fmtlen, query->format ?: "",
147 		  query->first_lineno, query->last_lineno, query->class_string);
148 }
149 
150 static struct ddebug_class_map *ddebug_find_valid_class(struct ddebug_table const *dt,
151 							  const char *class_string, int *class_id)
152 {
153 	struct ddebug_class_map *map;
154 	int idx;
155 
156 	list_for_each_entry(map, &dt->maps, link) {
157 		idx = match_string(map->class_names, map->length, class_string);
158 		if (idx >= 0) {
159 			*class_id = idx + map->base;
160 			return map;
161 		}
162 	}
163 	*class_id = -ENOENT;
164 	return NULL;
165 }
166 
167 #define __outvar /* filled by callee */
168 /*
169  * Search the tables for _ddebug's which match the given `query' and
170  * apply the `flags' and `mask' to them.  Returns number of matching
171  * callsites, normally the same as number of changes.  If verbose,
172  * logs the changes.  Takes ddebug_lock.
173  */
174 static int ddebug_change(const struct ddebug_query *query,
175 			 struct flag_settings *modifiers)
176 {
177 	int i;
178 	struct ddebug_table *dt;
179 	unsigned int newflags;
180 	unsigned int nfound = 0;
181 	struct flagsbuf fbuf, nbuf;
182 	struct ddebug_class_map *map = NULL;
183 	int __outvar valid_class;
184 
185 	/* search for matching ddebugs */
186 	mutex_lock(&ddebug_lock);
187 	list_for_each_entry(dt, &ddebug_tables, link) {
188 
189 		/* match against the module name */
190 		if (query->module &&
191 		    !match_wildcard(query->module, dt->mod_name))
192 			continue;
193 
194 		if (query->class_string) {
195 			map = ddebug_find_valid_class(dt, query->class_string, &valid_class);
196 			if (!map)
197 				continue;
198 		} else {
199 			/* constrain query, do not touch class'd callsites */
200 			valid_class = _DPRINTK_CLASS_DFLT;
201 		}
202 
203 		for (i = 0; i < dt->num_ddebugs; i++) {
204 			struct _ddebug *dp = &dt->ddebugs[i];
205 
206 			/* match site against query-class */
207 			if (dp->class_id != valid_class)
208 				continue;
209 
210 			/* match against the source filename */
211 			if (query->filename &&
212 			    !match_wildcard(query->filename, dp->filename) &&
213 			    !match_wildcard(query->filename,
214 					   kbasename(dp->filename)) &&
215 			    !match_wildcard(query->filename,
216 					   trim_prefix(dp->filename)))
217 				continue;
218 
219 			/* match against the function */
220 			if (query->function &&
221 			    !match_wildcard(query->function, dp->function))
222 				continue;
223 
224 			/* match against the format */
225 			if (query->format) {
226 				if (*query->format == '^') {
227 					char *p;
228 					/* anchored search. match must be at beginning */
229 					p = strstr(dp->format, query->format+1);
230 					if (p != dp->format)
231 						continue;
232 				} else if (!strstr(dp->format, query->format))
233 					continue;
234 			}
235 
236 			/* match against the line number range */
237 			if (query->first_lineno &&
238 			    dp->lineno < query->first_lineno)
239 				continue;
240 			if (query->last_lineno &&
241 			    dp->lineno > query->last_lineno)
242 				continue;
243 
244 			nfound++;
245 
246 			newflags = (dp->flags & modifiers->mask) | modifiers->flags;
247 			if (newflags == dp->flags)
248 				continue;
249 #ifdef CONFIG_JUMP_LABEL
250 			if (dp->flags & _DPRINTK_FLAGS_PRINT) {
251 				if (!(newflags & _DPRINTK_FLAGS_PRINT))
252 					static_branch_disable(&dp->key.dd_key_true);
253 			} else if (newflags & _DPRINTK_FLAGS_PRINT) {
254 				static_branch_enable(&dp->key.dd_key_true);
255 			}
256 #endif
257 			v4pr_info("changed %s:%d [%s]%s %s => %s\n",
258 				  trim_prefix(dp->filename), dp->lineno,
259 				  dt->mod_name, dp->function,
260 				  ddebug_describe_flags(dp->flags, &fbuf),
261 				  ddebug_describe_flags(newflags, &nbuf));
262 			dp->flags = newflags;
263 		}
264 	}
265 	mutex_unlock(&ddebug_lock);
266 
267 	if (!nfound && verbose)
268 		pr_info("no matches for query\n");
269 
270 	return nfound;
271 }
272 
273 /*
274  * Split the buffer `buf' into space-separated words.
275  * Handles simple " and ' quoting, i.e. without nested,
276  * embedded or escaped \".  Return the number of words
277  * or <0 on error.
278  */
279 static int ddebug_tokenize(char *buf, char *words[], int maxwords)
280 {
281 	int nwords = 0;
282 
283 	while (*buf) {
284 		char *end;
285 
286 		/* Skip leading whitespace */
287 		buf = skip_spaces(buf);
288 		if (!*buf)
289 			break;	/* oh, it was trailing whitespace */
290 		if (*buf == '#')
291 			break;	/* token starts comment, skip rest of line */
292 
293 		/* find `end' of word, whitespace separated or quoted */
294 		if (*buf == '"' || *buf == '\'') {
295 			int quote = *buf++;
296 			for (end = buf; *end && *end != quote; end++)
297 				;
298 			if (!*end) {
299 				pr_err("unclosed quote: %s\n", buf);
300 				return -EINVAL;	/* unclosed quote */
301 			}
302 		} else {
303 			for (end = buf; *end && !isspace(*end); end++)
304 				;
305 			BUG_ON(end == buf);
306 		}
307 
308 		/* `buf' is start of word, `end' is one past its end */
309 		if (nwords == maxwords) {
310 			pr_err("too many words, legal max <=%d\n", maxwords);
311 			return -EINVAL;	/* ran out of words[] before bytes */
312 		}
313 		if (*end)
314 			*end++ = '\0';	/* terminate the word */
315 		words[nwords++] = buf;
316 		buf = end;
317 	}
318 
319 	if (verbose >= 3) {
320 		int i;
321 		pr_info("split into words:");
322 		for (i = 0; i < nwords; i++)
323 			pr_cont(" \"%s\"", words[i]);
324 		pr_cont("\n");
325 	}
326 
327 	return nwords;
328 }
329 
330 /*
331  * Parse a single line number.  Note that the empty string ""
332  * is treated as a special case and converted to zero, which
333  * is later treated as a "don't care" value.
334  */
335 static inline int parse_lineno(const char *str, unsigned int *val)
336 {
337 	BUG_ON(str == NULL);
338 	if (*str == '\0') {
339 		*val = 0;
340 		return 0;
341 	}
342 	if (kstrtouint(str, 10, val) < 0) {
343 		pr_err("bad line-number: %s\n", str);
344 		return -EINVAL;
345 	}
346 	return 0;
347 }
348 
349 static int parse_linerange(struct ddebug_query *query, const char *first)
350 {
351 	char *last = strchr(first, '-');
352 
353 	if (query->first_lineno || query->last_lineno) {
354 		pr_err("match-spec: line used 2x\n");
355 		return -EINVAL;
356 	}
357 	if (last)
358 		*last++ = '\0';
359 	if (parse_lineno(first, &query->first_lineno) < 0)
360 		return -EINVAL;
361 	if (last) {
362 		/* range <first>-<last> */
363 		if (parse_lineno(last, &query->last_lineno) < 0)
364 			return -EINVAL;
365 
366 		/* special case for last lineno not specified */
367 		if (query->last_lineno == 0)
368 			query->last_lineno = UINT_MAX;
369 
370 		if (query->last_lineno < query->first_lineno) {
371 			pr_err("last-line:%d < 1st-line:%d\n",
372 			       query->last_lineno,
373 			       query->first_lineno);
374 			return -EINVAL;
375 		}
376 	} else {
377 		query->last_lineno = query->first_lineno;
378 	}
379 	v3pr_info("parsed line %d-%d\n", query->first_lineno,
380 		 query->last_lineno);
381 	return 0;
382 }
383 
384 static int check_set(const char **dest, char *src, char *name)
385 {
386 	int rc = 0;
387 
388 	if (*dest) {
389 		rc = -EINVAL;
390 		pr_err("match-spec:%s val:%s overridden by %s\n",
391 		       name, *dest, src);
392 	}
393 	*dest = src;
394 	return rc;
395 }
396 
397 /*
398  * Parse words[] as a ddebug query specification, which is a series
399  * of (keyword, value) pairs chosen from these possibilities:
400  *
401  * func <function-name>
402  * file <full-pathname>
403  * file <base-filename>
404  * module <module-name>
405  * format <escaped-string-to-find-in-format>
406  * line <lineno>
407  * line <first-lineno>-<last-lineno> // where either may be empty
408  *
409  * Only 1 of each type is allowed.
410  * Returns 0 on success, <0 on error.
411  */
412 static int ddebug_parse_query(char *words[], int nwords,
413 			struct ddebug_query *query, const char *modname)
414 {
415 	unsigned int i;
416 	int rc = 0;
417 	char *fline;
418 
419 	/* check we have an even number of words */
420 	if (nwords % 2 != 0) {
421 		pr_err("expecting pairs of match-spec <value>\n");
422 		return -EINVAL;
423 	}
424 
425 	for (i = 0; i < nwords; i += 2) {
426 		char *keyword = words[i];
427 		char *arg = words[i+1];
428 
429 		if (!strcmp(keyword, "func")) {
430 			rc = check_set(&query->function, arg, "func");
431 		} else if (!strcmp(keyword, "file")) {
432 			if (check_set(&query->filename, arg, "file"))
433 				return -EINVAL;
434 
435 			/* tail :$info is function or line-range */
436 			fline = strchr(query->filename, ':');
437 			if (!fline)
438 				continue;
439 			*fline++ = '\0';
440 			if (isalpha(*fline) || *fline == '*' || *fline == '?') {
441 				/* take as function name */
442 				if (check_set(&query->function, fline, "func"))
443 					return -EINVAL;
444 			} else {
445 				if (parse_linerange(query, fline))
446 					return -EINVAL;
447 			}
448 		} else if (!strcmp(keyword, "module")) {
449 			rc = check_set(&query->module, arg, "module");
450 		} else if (!strcmp(keyword, "format")) {
451 			string_unescape_inplace(arg, UNESCAPE_SPACE |
452 							    UNESCAPE_OCTAL |
453 							    UNESCAPE_SPECIAL);
454 			rc = check_set(&query->format, arg, "format");
455 		} else if (!strcmp(keyword, "line")) {
456 			if (parse_linerange(query, arg))
457 				return -EINVAL;
458 		} else if (!strcmp(keyword, "class")) {
459 			rc = check_set(&query->class_string, arg, "class");
460 		} else {
461 			pr_err("unknown keyword \"%s\"\n", keyword);
462 			return -EINVAL;
463 		}
464 		if (rc)
465 			return rc;
466 	}
467 	if (!query->module && modname)
468 		/*
469 		 * support $modname.dyndbg=<multiple queries>, when
470 		 * not given in the query itself
471 		 */
472 		query->module = modname;
473 
474 	vpr_info_dq(query, "parsed");
475 	return 0;
476 }
477 
478 /*
479  * Parse `str' as a flags specification, format [-+=][p]+.
480  * Sets up *maskp and *flagsp to be used when changing the
481  * flags fields of matched _ddebug's.  Returns 0 on success
482  * or <0 on error.
483  */
484 static int ddebug_parse_flags(const char *str, struct flag_settings *modifiers)
485 {
486 	int op, i;
487 
488 	switch (*str) {
489 	case '+':
490 	case '-':
491 	case '=':
492 		op = *str++;
493 		break;
494 	default:
495 		pr_err("bad flag-op %c, at start of %s\n", *str, str);
496 		return -EINVAL;
497 	}
498 	v3pr_info("op='%c'\n", op);
499 
500 	for (; *str ; ++str) {
501 		for (i = ARRAY_SIZE(opt_array) - 1; i >= 0; i--) {
502 			if (*str == opt_array[i].opt_char) {
503 				modifiers->flags |= opt_array[i].flag;
504 				break;
505 			}
506 		}
507 		if (i < 0) {
508 			pr_err("unknown flag '%c'\n", *str);
509 			return -EINVAL;
510 		}
511 	}
512 	v3pr_info("flags=0x%x\n", modifiers->flags);
513 
514 	/* calculate final flags, mask based upon op */
515 	switch (op) {
516 	case '=':
517 		/* modifiers->flags already set */
518 		modifiers->mask = 0;
519 		break;
520 	case '+':
521 		modifiers->mask = ~0U;
522 		break;
523 	case '-':
524 		modifiers->mask = ~modifiers->flags;
525 		modifiers->flags = 0;
526 		break;
527 	}
528 	v3pr_info("*flagsp=0x%x *maskp=0x%x\n", modifiers->flags, modifiers->mask);
529 
530 	return 0;
531 }
532 
533 static int ddebug_exec_query(char *query_string, const char *modname)
534 {
535 	struct flag_settings modifiers = {};
536 	struct ddebug_query query = {};
537 #define MAXWORDS 9
538 	int nwords, nfound;
539 	char *words[MAXWORDS];
540 
541 	nwords = ddebug_tokenize(query_string, words, MAXWORDS);
542 	if (nwords <= 0) {
543 		pr_err("tokenize failed\n");
544 		return -EINVAL;
545 	}
546 	/* check flags 1st (last arg) so query is pairs of spec,val */
547 	if (ddebug_parse_flags(words[nwords-1], &modifiers)) {
548 		pr_err("flags parse failed\n");
549 		return -EINVAL;
550 	}
551 	if (ddebug_parse_query(words, nwords-1, &query, modname)) {
552 		pr_err("query parse failed\n");
553 		return -EINVAL;
554 	}
555 	/* actually go and implement the change */
556 	nfound = ddebug_change(&query, &modifiers);
557 	vpr_info_dq(&query, nfound ? "applied" : "no-match");
558 
559 	return nfound;
560 }
561 
562 /* handle multiple queries in query string, continue on error, return
563    last error or number of matching callsites.  Module name is either
564    in param (for boot arg) or perhaps in query string.
565 */
566 static int ddebug_exec_queries(char *query, const char *modname)
567 {
568 	char *split;
569 	int i, errs = 0, exitcode = 0, rc, nfound = 0;
570 
571 	for (i = 0; query; query = split) {
572 		split = strpbrk(query, ";\n");
573 		if (split)
574 			*split++ = '\0';
575 
576 		query = skip_spaces(query);
577 		if (!query || !*query || *query == '#')
578 			continue;
579 
580 		vpr_info("query %d: \"%s\" mod:%s\n", i, query, modname ?: "*");
581 
582 		rc = ddebug_exec_query(query, modname);
583 		if (rc < 0) {
584 			errs++;
585 			exitcode = rc;
586 		} else {
587 			nfound += rc;
588 		}
589 		i++;
590 	}
591 	if (i)
592 		v2pr_info("processed %d queries, with %d matches, %d errs\n",
593 			 i, nfound, errs);
594 
595 	if (exitcode)
596 		return exitcode;
597 	return nfound;
598 }
599 
600 /* apply a new bitmap to the sys-knob's current bit-state */
601 static int ddebug_apply_class_bitmap(const struct ddebug_class_param *dcp,
602 				     unsigned long *new_bits, unsigned long *old_bits)
603 {
604 #define QUERY_SIZE 128
605 	char query[QUERY_SIZE];
606 	const struct ddebug_class_map *map = dcp->map;
607 	int matches = 0;
608 	int bi, ct;
609 
610 	v2pr_info("apply: 0x%lx to: 0x%lx\n", *new_bits, *old_bits);
611 
612 	for (bi = 0; bi < map->length; bi++) {
613 		if (test_bit(bi, new_bits) == test_bit(bi, old_bits))
614 			continue;
615 
616 		snprintf(query, QUERY_SIZE, "class %s %c%s", map->class_names[bi],
617 			 test_bit(bi, new_bits) ? '+' : '-', dcp->flags);
618 
619 		ct = ddebug_exec_queries(query, NULL);
620 		matches += ct;
621 
622 		v2pr_info("bit_%d: %d matches on class: %s -> 0x%lx\n", bi,
623 			  ct, map->class_names[bi], *new_bits);
624 	}
625 	return matches;
626 }
627 
628 /* stub to later conditionally add "$module." prefix where not already done */
629 #define KP_NAME(kp)	kp->name
630 
631 #define CLASSMAP_BITMASK(width) ((1UL << (width)) - 1)
632 
633 /* accept comma-separated-list of [+-] classnames */
634 static int param_set_dyndbg_classnames(const char *instr, const struct kernel_param *kp)
635 {
636 	const struct ddebug_class_param *dcp = kp->arg;
637 	const struct ddebug_class_map *map = dcp->map;
638 	unsigned long curr_bits, old_bits;
639 	char *cl_str, *p, *tmp;
640 	int cls_id, totct = 0;
641 	bool wanted;
642 
643 	cl_str = tmp = kstrdup_and_replace(instr, '\n', '\0', GFP_KERNEL);
644 	if (!tmp)
645 		return -ENOMEM;
646 
647 	/* start with previously set state-bits, then modify */
648 	curr_bits = old_bits = *dcp->bits;
649 	vpr_info("\"%s\" > %s:0x%lx\n", cl_str, KP_NAME(kp), curr_bits);
650 
651 	for (; cl_str; cl_str = p) {
652 		p = strchr(cl_str, ',');
653 		if (p)
654 			*p++ = '\0';
655 
656 		if (*cl_str == '-') {
657 			wanted = false;
658 			cl_str++;
659 		} else {
660 			wanted = true;
661 			if (*cl_str == '+')
662 				cl_str++;
663 		}
664 		cls_id = match_string(map->class_names, map->length, cl_str);
665 		if (cls_id < 0) {
666 			pr_err("%s unknown to %s\n", cl_str, KP_NAME(kp));
667 			continue;
668 		}
669 
670 		/* have one or more valid class_ids of one *_NAMES type */
671 		switch (map->map_type) {
672 		case DD_CLASS_TYPE_DISJOINT_NAMES:
673 			/* the +/- pertains to a single bit */
674 			if (test_bit(cls_id, &curr_bits) == wanted) {
675 				v3pr_info("no change on %s\n", cl_str);
676 				continue;
677 			}
678 			curr_bits ^= BIT(cls_id);
679 			totct += ddebug_apply_class_bitmap(dcp, &curr_bits, dcp->bits);
680 			*dcp->bits = curr_bits;
681 			v2pr_info("%s: changed bit %d:%s\n", KP_NAME(kp), cls_id,
682 				  map->class_names[cls_id]);
683 			break;
684 		case DD_CLASS_TYPE_LEVEL_NAMES:
685 			/* cls_id = N in 0..max. wanted +/- determines N or N-1 */
686 			old_bits = CLASSMAP_BITMASK(*dcp->lvl);
687 			curr_bits = CLASSMAP_BITMASK(cls_id + (wanted ? 1 : 0 ));
688 
689 			totct += ddebug_apply_class_bitmap(dcp, &curr_bits, &old_bits);
690 			*dcp->lvl = (cls_id + (wanted ? 1 : 0));
691 			v2pr_info("%s: changed bit-%d: \"%s\" %lx->%lx\n", KP_NAME(kp), cls_id,
692 				  map->class_names[cls_id], old_bits, curr_bits);
693 			break;
694 		default:
695 			pr_err("illegal map-type value %d\n", map->map_type);
696 		}
697 	}
698 	kfree(tmp);
699 	vpr_info("total matches: %d\n", totct);
700 	return 0;
701 }
702 
703 /**
704  * param_set_dyndbg_classes - class FOO >control
705  * @instr: string echo>d to sysfs, input depends on map_type
706  * @kp:    kp->arg has state: bits/lvl, map, map_type
707  *
708  * Enable/disable prdbgs by their class, as given in the arguments to
709  * DECLARE_DYNDBG_CLASSMAP.  For LEVEL map-types, enforce relative
710  * levels by bitpos.
711  *
712  * Returns: 0 or <0 if error.
713  */
714 int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp)
715 {
716 	const struct ddebug_class_param *dcp = kp->arg;
717 	const struct ddebug_class_map *map = dcp->map;
718 	unsigned long inrep, new_bits, old_bits;
719 	int rc, totct = 0;
720 
721 	switch (map->map_type) {
722 
723 	case DD_CLASS_TYPE_DISJOINT_NAMES:
724 	case DD_CLASS_TYPE_LEVEL_NAMES:
725 		/* handle [+-]classnames list separately, we are done here */
726 		return param_set_dyndbg_classnames(instr, kp);
727 
728 	case DD_CLASS_TYPE_DISJOINT_BITS:
729 	case DD_CLASS_TYPE_LEVEL_NUM:
730 		/* numeric input, accept and fall-thru */
731 		rc = kstrtoul(instr, 0, &inrep);
732 		if (rc) {
733 			pr_err("expecting numeric input: %s > %s\n", instr, KP_NAME(kp));
734 			return -EINVAL;
735 		}
736 		break;
737 	default:
738 		pr_err("%s: bad map type: %d\n", KP_NAME(kp), map->map_type);
739 		return -EINVAL;
740 	}
741 
742 	/* only _BITS,_NUM (numeric) map-types get here */
743 	switch (map->map_type) {
744 	case DD_CLASS_TYPE_DISJOINT_BITS:
745 		/* expect bits. mask and warn if too many */
746 		if (inrep & ~CLASSMAP_BITMASK(map->length)) {
747 			pr_warn("%s: input: 0x%lx exceeds mask: 0x%lx, masking\n",
748 				KP_NAME(kp), inrep, CLASSMAP_BITMASK(map->length));
749 			inrep &= CLASSMAP_BITMASK(map->length);
750 		}
751 		v2pr_info("bits:%lx > %s\n", inrep, KP_NAME(kp));
752 		totct += ddebug_apply_class_bitmap(dcp, &inrep, dcp->bits);
753 		*dcp->bits = inrep;
754 		break;
755 	case DD_CLASS_TYPE_LEVEL_NUM:
756 		/* input is bitpos, of highest verbosity to be enabled */
757 		if (inrep > map->length) {
758 			pr_warn("%s: level:%ld exceeds max:%d, clamping\n",
759 				KP_NAME(kp), inrep, map->length);
760 			inrep = map->length;
761 		}
762 		old_bits = CLASSMAP_BITMASK(*dcp->lvl);
763 		new_bits = CLASSMAP_BITMASK(inrep);
764 		v2pr_info("lvl:%ld bits:0x%lx > %s\n", inrep, new_bits, KP_NAME(kp));
765 		totct += ddebug_apply_class_bitmap(dcp, &new_bits, &old_bits);
766 		*dcp->lvl = inrep;
767 		break;
768 	default:
769 		pr_warn("%s: bad map type: %d\n", KP_NAME(kp), map->map_type);
770 	}
771 	vpr_info("%s: total matches: %d\n", KP_NAME(kp), totct);
772 	return 0;
773 }
774 EXPORT_SYMBOL(param_set_dyndbg_classes);
775 
776 /**
777  * param_get_dyndbg_classes - classes reader
778  * @buffer: string description of controlled bits -> classes
779  * @kp:     kp->arg has state: bits, map
780  *
781  * Reads last written state, underlying prdbg state may have been
782  * altered by direct >control.  Displays 0x for DISJOINT, 0-N for
783  * LEVEL Returns: #chars written or <0 on error
784  */
785 int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp)
786 {
787 	const struct ddebug_class_param *dcp = kp->arg;
788 	const struct ddebug_class_map *map = dcp->map;
789 
790 	switch (map->map_type) {
791 
792 	case DD_CLASS_TYPE_DISJOINT_NAMES:
793 	case DD_CLASS_TYPE_DISJOINT_BITS:
794 		return scnprintf(buffer, PAGE_SIZE, "0x%lx\n", *dcp->bits);
795 
796 	case DD_CLASS_TYPE_LEVEL_NAMES:
797 	case DD_CLASS_TYPE_LEVEL_NUM:
798 		return scnprintf(buffer, PAGE_SIZE, "%d\n", *dcp->lvl);
799 	default:
800 		return -1;
801 	}
802 }
803 EXPORT_SYMBOL(param_get_dyndbg_classes);
804 
805 const struct kernel_param_ops param_ops_dyndbg_classes = {
806 	.set = param_set_dyndbg_classes,
807 	.get = param_get_dyndbg_classes,
808 };
809 EXPORT_SYMBOL(param_ops_dyndbg_classes);
810 
811 #define PREFIX_SIZE 128
812 
813 static int remaining(int wrote)
814 {
815 	if (PREFIX_SIZE - wrote > 0)
816 		return PREFIX_SIZE - wrote;
817 	return 0;
818 }
819 
820 static char *__dynamic_emit_prefix(const struct _ddebug *desc, char *buf)
821 {
822 	int pos_after_tid;
823 	int pos = 0;
824 
825 	if (desc->flags & _DPRINTK_FLAGS_INCL_TID) {
826 		if (in_interrupt())
827 			pos += snprintf(buf + pos, remaining(pos), "<intr> ");
828 		else
829 			pos += snprintf(buf + pos, remaining(pos), "[%d] ",
830 					task_pid_vnr(current));
831 	}
832 	pos_after_tid = pos;
833 	if (desc->flags & _DPRINTK_FLAGS_INCL_MODNAME)
834 		pos += snprintf(buf + pos, remaining(pos), "%s:",
835 				desc->modname);
836 	if (desc->flags & _DPRINTK_FLAGS_INCL_FUNCNAME)
837 		pos += snprintf(buf + pos, remaining(pos), "%s:",
838 				desc->function);
839 	if (desc->flags & _DPRINTK_FLAGS_INCL_SOURCENAME)
840 		pos += snprintf(buf + pos, remaining(pos), "%s:",
841 				trim_prefix(desc->filename));
842 	if (desc->flags & _DPRINTK_FLAGS_INCL_LINENO)
843 		pos += snprintf(buf + pos, remaining(pos), "%d:",
844 				desc->lineno);
845 	if (pos - pos_after_tid)
846 		pos += snprintf(buf + pos, remaining(pos), " ");
847 	if (pos >= PREFIX_SIZE)
848 		buf[PREFIX_SIZE - 1] = '\0';
849 
850 	return buf;
851 }
852 
853 static inline char *dynamic_emit_prefix(struct _ddebug *desc, char *buf)
854 {
855 	if (unlikely(desc->flags & _DPRINTK_FLAGS_INCL_ANY))
856 		return __dynamic_emit_prefix(desc, buf);
857 	return buf;
858 }
859 
860 void __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...)
861 {
862 	va_list args;
863 	struct va_format vaf;
864 	char buf[PREFIX_SIZE] = "";
865 
866 	BUG_ON(!descriptor);
867 	BUG_ON(!fmt);
868 
869 	va_start(args, fmt);
870 
871 	vaf.fmt = fmt;
872 	vaf.va = &args;
873 
874 	printk(KERN_DEBUG "%s%pV", dynamic_emit_prefix(descriptor, buf), &vaf);
875 
876 	va_end(args);
877 }
878 EXPORT_SYMBOL(__dynamic_pr_debug);
879 
880 void __dynamic_dev_dbg(struct _ddebug *descriptor,
881 		      const struct device *dev, const char *fmt, ...)
882 {
883 	struct va_format vaf;
884 	va_list args;
885 
886 	BUG_ON(!descriptor);
887 	BUG_ON(!fmt);
888 
889 	va_start(args, fmt);
890 
891 	vaf.fmt = fmt;
892 	vaf.va = &args;
893 
894 	if (!dev) {
895 		printk(KERN_DEBUG "(NULL device *): %pV", &vaf);
896 	} else {
897 		char buf[PREFIX_SIZE] = "";
898 
899 		dev_printk_emit(LOGLEVEL_DEBUG, dev, "%s%s %s: %pV",
900 				dynamic_emit_prefix(descriptor, buf),
901 				dev_driver_string(dev), dev_name(dev),
902 				&vaf);
903 	}
904 
905 	va_end(args);
906 }
907 EXPORT_SYMBOL(__dynamic_dev_dbg);
908 
909 #ifdef CONFIG_NET
910 
911 void __dynamic_netdev_dbg(struct _ddebug *descriptor,
912 			  const struct net_device *dev, const char *fmt, ...)
913 {
914 	struct va_format vaf;
915 	va_list args;
916 
917 	BUG_ON(!descriptor);
918 	BUG_ON(!fmt);
919 
920 	va_start(args, fmt);
921 
922 	vaf.fmt = fmt;
923 	vaf.va = &args;
924 
925 	if (dev && dev->dev.parent) {
926 		char buf[PREFIX_SIZE] = "";
927 
928 		dev_printk_emit(LOGLEVEL_DEBUG, dev->dev.parent,
929 				"%s%s %s %s%s: %pV",
930 				dynamic_emit_prefix(descriptor, buf),
931 				dev_driver_string(dev->dev.parent),
932 				dev_name(dev->dev.parent),
933 				netdev_name(dev), netdev_reg_state(dev),
934 				&vaf);
935 	} else if (dev) {
936 		printk(KERN_DEBUG "%s%s: %pV", netdev_name(dev),
937 		       netdev_reg_state(dev), &vaf);
938 	} else {
939 		printk(KERN_DEBUG "(NULL net_device): %pV", &vaf);
940 	}
941 
942 	va_end(args);
943 }
944 EXPORT_SYMBOL(__dynamic_netdev_dbg);
945 
946 #endif
947 
948 #if IS_ENABLED(CONFIG_INFINIBAND)
949 
950 void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
951 			 const struct ib_device *ibdev, const char *fmt, ...)
952 {
953 	struct va_format vaf;
954 	va_list args;
955 
956 	va_start(args, fmt);
957 
958 	vaf.fmt = fmt;
959 	vaf.va = &args;
960 
961 	if (ibdev && ibdev->dev.parent) {
962 		char buf[PREFIX_SIZE] = "";
963 
964 		dev_printk_emit(LOGLEVEL_DEBUG, ibdev->dev.parent,
965 				"%s%s %s %s: %pV",
966 				dynamic_emit_prefix(descriptor, buf),
967 				dev_driver_string(ibdev->dev.parent),
968 				dev_name(ibdev->dev.parent),
969 				dev_name(&ibdev->dev),
970 				&vaf);
971 	} else if (ibdev) {
972 		printk(KERN_DEBUG "%s: %pV", dev_name(&ibdev->dev), &vaf);
973 	} else {
974 		printk(KERN_DEBUG "(NULL ib_device): %pV", &vaf);
975 	}
976 
977 	va_end(args);
978 }
979 EXPORT_SYMBOL(__dynamic_ibdev_dbg);
980 
981 #endif
982 
983 /*
984  * Install a noop handler to make dyndbg look like a normal kernel cli param.
985  * This avoids warnings about dyndbg being an unknown cli param when supplied
986  * by a user.
987  */
988 static __init int dyndbg_setup(char *str)
989 {
990 	return 1;
991 }
992 
993 __setup("dyndbg=", dyndbg_setup);
994 
995 /*
996  * File_ops->write method for <debugfs>/dynamic_debug/control.  Gathers the
997  * command text from userspace, parses and executes it.
998  */
999 #define USER_BUF_PAGE 4096
1000 static ssize_t ddebug_proc_write(struct file *file, const char __user *ubuf,
1001 				  size_t len, loff_t *offp)
1002 {
1003 	char *tmpbuf;
1004 	int ret;
1005 
1006 	if (len == 0)
1007 		return 0;
1008 	if (len > USER_BUF_PAGE - 1) {
1009 		pr_warn("expected <%d bytes into control\n", USER_BUF_PAGE);
1010 		return -E2BIG;
1011 	}
1012 	tmpbuf = memdup_user_nul(ubuf, len);
1013 	if (IS_ERR(tmpbuf))
1014 		return PTR_ERR(tmpbuf);
1015 	v2pr_info("read %zu bytes from userspace\n", len);
1016 
1017 	ret = ddebug_exec_queries(tmpbuf, NULL);
1018 	kfree(tmpbuf);
1019 	if (ret < 0)
1020 		return ret;
1021 
1022 	*offp += len;
1023 	return len;
1024 }
1025 
1026 /*
1027  * Set the iterator to point to the first _ddebug object
1028  * and return a pointer to that first object.  Returns
1029  * NULL if there are no _ddebugs at all.
1030  */
1031 static struct _ddebug *ddebug_iter_first(struct ddebug_iter *iter)
1032 {
1033 	if (list_empty(&ddebug_tables)) {
1034 		iter->table = NULL;
1035 		return NULL;
1036 	}
1037 	iter->table = list_entry(ddebug_tables.next,
1038 				 struct ddebug_table, link);
1039 	iter->idx = iter->table->num_ddebugs;
1040 	return &iter->table->ddebugs[--iter->idx];
1041 }
1042 
1043 /*
1044  * Advance the iterator to point to the next _ddebug
1045  * object from the one the iterator currently points at,
1046  * and returns a pointer to the new _ddebug.  Returns
1047  * NULL if the iterator has seen all the _ddebugs.
1048  */
1049 static struct _ddebug *ddebug_iter_next(struct ddebug_iter *iter)
1050 {
1051 	if (iter->table == NULL)
1052 		return NULL;
1053 	if (--iter->idx < 0) {
1054 		/* iterate to next table */
1055 		if (list_is_last(&iter->table->link, &ddebug_tables)) {
1056 			iter->table = NULL;
1057 			return NULL;
1058 		}
1059 		iter->table = list_entry(iter->table->link.next,
1060 					 struct ddebug_table, link);
1061 		iter->idx = iter->table->num_ddebugs;
1062 		--iter->idx;
1063 	}
1064 	return &iter->table->ddebugs[iter->idx];
1065 }
1066 
1067 /*
1068  * Seq_ops start method.  Called at the start of every
1069  * read() call from userspace.  Takes the ddebug_lock and
1070  * seeks the seq_file's iterator to the given position.
1071  */
1072 static void *ddebug_proc_start(struct seq_file *m, loff_t *pos)
1073 {
1074 	struct ddebug_iter *iter = m->private;
1075 	struct _ddebug *dp;
1076 	int n = *pos;
1077 
1078 	mutex_lock(&ddebug_lock);
1079 
1080 	if (!n)
1081 		return SEQ_START_TOKEN;
1082 	if (n < 0)
1083 		return NULL;
1084 	dp = ddebug_iter_first(iter);
1085 	while (dp != NULL && --n > 0)
1086 		dp = ddebug_iter_next(iter);
1087 	return dp;
1088 }
1089 
1090 /*
1091  * Seq_ops next method.  Called several times within a read()
1092  * call from userspace, with ddebug_lock held.  Walks to the
1093  * next _ddebug object with a special case for the header line.
1094  */
1095 static void *ddebug_proc_next(struct seq_file *m, void *p, loff_t *pos)
1096 {
1097 	struct ddebug_iter *iter = m->private;
1098 	struct _ddebug *dp;
1099 
1100 	if (p == SEQ_START_TOKEN)
1101 		dp = ddebug_iter_first(iter);
1102 	else
1103 		dp = ddebug_iter_next(iter);
1104 	++*pos;
1105 	return dp;
1106 }
1107 
1108 #define class_in_range(class_id, map)					\
1109 	(class_id >= map->base && class_id < map->base + map->length)
1110 
1111 static const char *ddebug_class_name(struct ddebug_iter *iter, struct _ddebug *dp)
1112 {
1113 	struct ddebug_class_map *map;
1114 
1115 	list_for_each_entry(map, &iter->table->maps, link)
1116 		if (class_in_range(dp->class_id, map))
1117 			return map->class_names[dp->class_id - map->base];
1118 
1119 	return NULL;
1120 }
1121 
1122 /*
1123  * Seq_ops show method.  Called several times within a read()
1124  * call from userspace, with ddebug_lock held.  Formats the
1125  * current _ddebug as a single human-readable line, with a
1126  * special case for the header line.
1127  */
1128 static int ddebug_proc_show(struct seq_file *m, void *p)
1129 {
1130 	struct ddebug_iter *iter = m->private;
1131 	struct _ddebug *dp = p;
1132 	struct flagsbuf flags;
1133 	char const *class;
1134 
1135 	if (p == SEQ_START_TOKEN) {
1136 		seq_puts(m,
1137 			 "# filename:lineno [module]function flags format\n");
1138 		return 0;
1139 	}
1140 
1141 	seq_printf(m, "%s:%u [%s]%s =%s \"",
1142 		   trim_prefix(dp->filename), dp->lineno,
1143 		   iter->table->mod_name, dp->function,
1144 		   ddebug_describe_flags(dp->flags, &flags));
1145 	seq_escape_str(m, dp->format, ESCAPE_SPACE, "\t\r\n\"");
1146 	seq_puts(m, "\"");
1147 
1148 	if (dp->class_id != _DPRINTK_CLASS_DFLT) {
1149 		class = ddebug_class_name(iter, dp);
1150 		if (class)
1151 			seq_printf(m, " class:%s", class);
1152 		else
1153 			seq_printf(m, " class unknown, _id:%d", dp->class_id);
1154 	}
1155 	seq_puts(m, "\n");
1156 
1157 	return 0;
1158 }
1159 
1160 /*
1161  * Seq_ops stop method.  Called at the end of each read()
1162  * call from userspace.  Drops ddebug_lock.
1163  */
1164 static void ddebug_proc_stop(struct seq_file *m, void *p)
1165 {
1166 	mutex_unlock(&ddebug_lock);
1167 }
1168 
1169 static const struct seq_operations ddebug_proc_seqops = {
1170 	.start = ddebug_proc_start,
1171 	.next = ddebug_proc_next,
1172 	.show = ddebug_proc_show,
1173 	.stop = ddebug_proc_stop
1174 };
1175 
1176 static int ddebug_proc_open(struct inode *inode, struct file *file)
1177 {
1178 	return seq_open_private(file, &ddebug_proc_seqops,
1179 				sizeof(struct ddebug_iter));
1180 }
1181 
1182 static const struct file_operations ddebug_proc_fops = {
1183 	.owner = THIS_MODULE,
1184 	.open = ddebug_proc_open,
1185 	.read = seq_read,
1186 	.llseek = seq_lseek,
1187 	.release = seq_release_private,
1188 	.write = ddebug_proc_write
1189 };
1190 
1191 static const struct proc_ops proc_fops = {
1192 	.proc_open = ddebug_proc_open,
1193 	.proc_read = seq_read,
1194 	.proc_lseek = seq_lseek,
1195 	.proc_release = seq_release_private,
1196 	.proc_write = ddebug_proc_write
1197 };
1198 
1199 static void ddebug_attach_module_classes(struct ddebug_table *dt,
1200 					 struct ddebug_class_map *classes,
1201 					 int num_classes)
1202 {
1203 	struct ddebug_class_map *cm;
1204 	int i, j, ct = 0;
1205 
1206 	for (cm = classes, i = 0; i < num_classes; i++, cm++) {
1207 
1208 		if (!strcmp(cm->mod_name, dt->mod_name)) {
1209 
1210 			v2pr_info("class[%d]: module:%s base:%d len:%d ty:%d\n", i,
1211 				  cm->mod_name, cm->base, cm->length, cm->map_type);
1212 
1213 			for (j = 0; j < cm->length; j++)
1214 				v3pr_info(" %d: %d %s\n", j + cm->base, j,
1215 					  cm->class_names[j]);
1216 
1217 			list_add(&cm->link, &dt->maps);
1218 			ct++;
1219 		}
1220 	}
1221 	if (ct)
1222 		vpr_info("module:%s attached %d classes\n", dt->mod_name, ct);
1223 }
1224 
1225 /*
1226  * Allocate a new ddebug_table for the given module
1227  * and add it to the global list.
1228  */
1229 static int ddebug_add_module(struct _ddebug_info *di, const char *modname)
1230 {
1231 	struct ddebug_table *dt;
1232 
1233 	v3pr_info("add-module: %s.%d sites\n", modname, di->num_descs);
1234 	if (!di->num_descs) {
1235 		v3pr_info(" skip %s\n", modname);
1236 		return 0;
1237 	}
1238 
1239 	dt = kzalloc(sizeof(*dt), GFP_KERNEL);
1240 	if (dt == NULL) {
1241 		pr_err("error adding module: %s\n", modname);
1242 		return -ENOMEM;
1243 	}
1244 	/*
1245 	 * For built-in modules, name lives in .rodata and is
1246 	 * immortal. For loaded modules, name points at the name[]
1247 	 * member of struct module, which lives at least as long as
1248 	 * this struct ddebug_table.
1249 	 */
1250 	dt->mod_name = modname;
1251 	dt->ddebugs = di->descs;
1252 	dt->num_ddebugs = di->num_descs;
1253 
1254 	INIT_LIST_HEAD(&dt->link);
1255 	INIT_LIST_HEAD(&dt->maps);
1256 
1257 	if (di->classes && di->num_classes)
1258 		ddebug_attach_module_classes(dt, di->classes, di->num_classes);
1259 
1260 	mutex_lock(&ddebug_lock);
1261 	list_add_tail(&dt->link, &ddebug_tables);
1262 	mutex_unlock(&ddebug_lock);
1263 
1264 	vpr_info("%3u debug prints in module %s\n", di->num_descs, modname);
1265 	return 0;
1266 }
1267 
1268 /* helper for ddebug_dyndbg_(boot|module)_param_cb */
1269 static int ddebug_dyndbg_param_cb(char *param, char *val,
1270 				const char *modname, int on_err)
1271 {
1272 	char *sep;
1273 
1274 	sep = strchr(param, '.');
1275 	if (sep) {
1276 		/* needed only for ddebug_dyndbg_boot_param_cb */
1277 		*sep = '\0';
1278 		modname = param;
1279 		param = sep + 1;
1280 	}
1281 	if (strcmp(param, "dyndbg"))
1282 		return on_err; /* determined by caller */
1283 
1284 	ddebug_exec_queries((val ? val : "+p"), modname);
1285 
1286 	return 0; /* query failure shouldn't stop module load */
1287 }
1288 
1289 /* handle both dyndbg and $module.dyndbg params at boot */
1290 static int ddebug_dyndbg_boot_param_cb(char *param, char *val,
1291 				const char *unused, void *arg)
1292 {
1293 	vpr_info("%s=\"%s\"\n", param, val);
1294 	return ddebug_dyndbg_param_cb(param, val, NULL, 0);
1295 }
1296 
1297 /*
1298  * modprobe foo finds foo.params in boot-args, strips "foo.", and
1299  * passes them to load_module().  This callback gets unknown params,
1300  * processes dyndbg params, rejects others.
1301  */
1302 int ddebug_dyndbg_module_param_cb(char *param, char *val, const char *module)
1303 {
1304 	vpr_info("module: %s %s=\"%s\"\n", module, param, val);
1305 	return ddebug_dyndbg_param_cb(param, val, module, -ENOENT);
1306 }
1307 
1308 static void ddebug_table_free(struct ddebug_table *dt)
1309 {
1310 	list_del_init(&dt->link);
1311 	kfree(dt);
1312 }
1313 
1314 #ifdef CONFIG_MODULES
1315 
1316 /*
1317  * Called in response to a module being unloaded.  Removes
1318  * any ddebug_table's which point at the module.
1319  */
1320 static int ddebug_remove_module(const char *mod_name)
1321 {
1322 	struct ddebug_table *dt, *nextdt;
1323 	int ret = -ENOENT;
1324 
1325 	mutex_lock(&ddebug_lock);
1326 	list_for_each_entry_safe(dt, nextdt, &ddebug_tables, link) {
1327 		if (dt->mod_name == mod_name) {
1328 			ddebug_table_free(dt);
1329 			ret = 0;
1330 			break;
1331 		}
1332 	}
1333 	mutex_unlock(&ddebug_lock);
1334 	if (!ret)
1335 		v2pr_info("removed module \"%s\"\n", mod_name);
1336 	return ret;
1337 }
1338 
1339 static int ddebug_module_notify(struct notifier_block *self, unsigned long val,
1340 				void *data)
1341 {
1342 	struct module *mod = data;
1343 	int ret = 0;
1344 
1345 	switch (val) {
1346 	case MODULE_STATE_COMING:
1347 		ret = ddebug_add_module(&mod->dyndbg_info, mod->name);
1348 		if (ret)
1349 			WARN(1, "Failed to allocate memory: dyndbg may not work properly.\n");
1350 		break;
1351 	case MODULE_STATE_GOING:
1352 		ddebug_remove_module(mod->name);
1353 		break;
1354 	}
1355 
1356 	return notifier_from_errno(ret);
1357 }
1358 
1359 static struct notifier_block ddebug_module_nb = {
1360 	.notifier_call = ddebug_module_notify,
1361 	.priority = 0, /* dynamic debug depends on jump label */
1362 };
1363 
1364 #endif /* CONFIG_MODULES */
1365 
1366 static void ddebug_remove_all_tables(void)
1367 {
1368 	mutex_lock(&ddebug_lock);
1369 	while (!list_empty(&ddebug_tables)) {
1370 		struct ddebug_table *dt = list_entry(ddebug_tables.next,
1371 						      struct ddebug_table,
1372 						      link);
1373 		ddebug_table_free(dt);
1374 	}
1375 	mutex_unlock(&ddebug_lock);
1376 }
1377 
1378 static __initdata int ddebug_init_success;
1379 
1380 static int __init dynamic_debug_init_control(void)
1381 {
1382 	struct proc_dir_entry *procfs_dir;
1383 	struct dentry *debugfs_dir;
1384 
1385 	if (!ddebug_init_success)
1386 		return -ENODEV;
1387 
1388 	/* Create the control file in debugfs if it is enabled */
1389 	if (debugfs_initialized()) {
1390 		debugfs_dir = debugfs_create_dir("dynamic_debug", NULL);
1391 		debugfs_create_file("control", 0644, debugfs_dir, NULL,
1392 				    &ddebug_proc_fops);
1393 	}
1394 
1395 	/* Also create the control file in procfs */
1396 	procfs_dir = proc_mkdir("dynamic_debug", NULL);
1397 	if (procfs_dir)
1398 		proc_create("control", 0644, procfs_dir, &proc_fops);
1399 
1400 	return 0;
1401 }
1402 
1403 static int __init dynamic_debug_init(void)
1404 {
1405 	struct _ddebug *iter, *iter_mod_start;
1406 	int ret, i, mod_sites, mod_ct;
1407 	const char *modname;
1408 	char *cmdline;
1409 
1410 	struct _ddebug_info di = {
1411 		.descs = __start___dyndbg,
1412 		.classes = __start___dyndbg_classes,
1413 		.num_descs = __stop___dyndbg - __start___dyndbg,
1414 		.num_classes = __stop___dyndbg_classes - __start___dyndbg_classes,
1415 	};
1416 
1417 #ifdef CONFIG_MODULES
1418 	ret = register_module_notifier(&ddebug_module_nb);
1419 	if (ret) {
1420 		pr_warn("Failed to register dynamic debug module notifier\n");
1421 		return ret;
1422 	}
1423 #endif /* CONFIG_MODULES */
1424 
1425 	if (&__start___dyndbg == &__stop___dyndbg) {
1426 		if (IS_ENABLED(CONFIG_DYNAMIC_DEBUG)) {
1427 			pr_warn("_ddebug table is empty in a CONFIG_DYNAMIC_DEBUG build\n");
1428 			return 1;
1429 		}
1430 		pr_info("Ignore empty _ddebug table in a CONFIG_DYNAMIC_DEBUG_CORE build\n");
1431 		ddebug_init_success = 1;
1432 		return 0;
1433 	}
1434 
1435 	iter = iter_mod_start = __start___dyndbg;
1436 	modname = iter->modname;
1437 	i = mod_sites = mod_ct = 0;
1438 
1439 	for (; iter < __stop___dyndbg; iter++, i++, mod_sites++) {
1440 
1441 		if (strcmp(modname, iter->modname)) {
1442 			mod_ct++;
1443 			di.num_descs = mod_sites;
1444 			di.descs = iter_mod_start;
1445 			ret = ddebug_add_module(&di, modname);
1446 			if (ret)
1447 				goto out_err;
1448 
1449 			mod_sites = 0;
1450 			modname = iter->modname;
1451 			iter_mod_start = iter;
1452 		}
1453 	}
1454 	di.num_descs = mod_sites;
1455 	di.descs = iter_mod_start;
1456 	ret = ddebug_add_module(&di, modname);
1457 	if (ret)
1458 		goto out_err;
1459 
1460 	ddebug_init_success = 1;
1461 	vpr_info("%d prdebugs in %d modules, %d KiB in ddebug tables, %d kiB in __dyndbg section\n",
1462 		 i, mod_ct, (int)((mod_ct * sizeof(struct ddebug_table)) >> 10),
1463 		 (int)((i * sizeof(struct _ddebug)) >> 10));
1464 
1465 	if (di.num_classes)
1466 		v2pr_info("  %d builtin ddebug class-maps\n", di.num_classes);
1467 
1468 	/* now that ddebug tables are loaded, process all boot args
1469 	 * again to find and activate queries given in dyndbg params.
1470 	 * While this has already been done for known boot params, it
1471 	 * ignored the unknown ones (dyndbg in particular).  Reusing
1472 	 * parse_args avoids ad-hoc parsing.  This will also attempt
1473 	 * to activate queries for not-yet-loaded modules, which is
1474 	 * slightly noisy if verbose, but harmless.
1475 	 */
1476 	cmdline = kstrdup(saved_command_line, GFP_KERNEL);
1477 	parse_args("dyndbg params", cmdline, NULL,
1478 		   0, 0, 0, NULL, &ddebug_dyndbg_boot_param_cb);
1479 	kfree(cmdline);
1480 	return 0;
1481 
1482 out_err:
1483 	ddebug_remove_all_tables();
1484 	return 0;
1485 }
1486 /* Allow early initialization for boot messages via boot param */
1487 early_initcall(dynamic_debug_init);
1488 
1489 /* Debugfs setup must be done later */
1490 fs_initcall(dynamic_debug_init_control);
1491