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