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