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