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