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