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 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 for (i = 0; i < nwords; i += 2) { 389 char *keyword = words[i]; 390 char *arg = words[i+1]; 391 392 if (!strcmp(keyword, "func")) { 393 rc = check_set(&query->function, arg, "func"); 394 } else if (!strcmp(keyword, "file")) { 395 if (check_set(&query->filename, arg, "file")) 396 return -EINVAL; 397 398 /* tail :$info is function or line-range */ 399 fline = strchr(query->filename, ':'); 400 if (!fline) 401 continue; 402 *fline++ = '\0'; 403 if (isalpha(*fline) || *fline == '*' || *fline == '?') { 404 /* take as function name */ 405 if (check_set(&query->function, fline, "func")) 406 return -EINVAL; 407 } else { 408 if (parse_linerange(query, fline)) 409 return -EINVAL; 410 } 411 } else if (!strcmp(keyword, "module")) { 412 rc = check_set(&query->module, arg, "module"); 413 } else if (!strcmp(keyword, "format")) { 414 string_unescape_inplace(arg, UNESCAPE_SPACE | 415 UNESCAPE_OCTAL | 416 UNESCAPE_SPECIAL); 417 rc = check_set(&query->format, arg, "format"); 418 } else if (!strcmp(keyword, "line")) { 419 if (parse_linerange(query, arg)) 420 return -EINVAL; 421 } else { 422 pr_err("unknown keyword \"%s\"\n", keyword); 423 return -EINVAL; 424 } 425 if (rc) 426 return rc; 427 } 428 if (!query->module && modname) 429 /* 430 * support $modname.dyndbg=<multiple queries>, when 431 * not given in the query itself 432 */ 433 query->module = modname; 434 435 vpr_info_dq(query, "parsed"); 436 return 0; 437 } 438 439 /* 440 * Parse `str' as a flags specification, format [-+=][p]+. 441 * Sets up *maskp and *flagsp to be used when changing the 442 * flags fields of matched _ddebug's. Returns 0 on success 443 * or <0 on error. 444 */ 445 static int ddebug_parse_flags(const char *str, struct flag_settings *modifiers) 446 { 447 int op, i; 448 449 switch (*str) { 450 case '+': 451 case '-': 452 case '=': 453 op = *str++; 454 break; 455 default: 456 pr_err("bad flag-op %c, at start of %s\n", *str, str); 457 return -EINVAL; 458 } 459 v3pr_info("op='%c'\n", op); 460 461 for (; *str ; ++str) { 462 for (i = ARRAY_SIZE(opt_array) - 1; i >= 0; i--) { 463 if (*str == opt_array[i].opt_char) { 464 modifiers->flags |= opt_array[i].flag; 465 break; 466 } 467 } 468 if (i < 0) { 469 pr_err("unknown flag '%c'\n", *str); 470 return -EINVAL; 471 } 472 } 473 v3pr_info("flags=0x%x\n", modifiers->flags); 474 475 /* calculate final flags, mask based upon op */ 476 switch (op) { 477 case '=': 478 /* modifiers->flags already set */ 479 modifiers->mask = 0; 480 break; 481 case '+': 482 modifiers->mask = ~0U; 483 break; 484 case '-': 485 modifiers->mask = ~modifiers->flags; 486 modifiers->flags = 0; 487 break; 488 } 489 v3pr_info("*flagsp=0x%x *maskp=0x%x\n", modifiers->flags, modifiers->mask); 490 491 return 0; 492 } 493 494 static int ddebug_exec_query(char *query_string, const char *modname) 495 { 496 struct flag_settings modifiers = {}; 497 struct ddebug_query query = {}; 498 #define MAXWORDS 9 499 int nwords, nfound; 500 char *words[MAXWORDS]; 501 502 nwords = ddebug_tokenize(query_string, words, MAXWORDS); 503 if (nwords <= 0) { 504 pr_err("tokenize failed\n"); 505 return -EINVAL; 506 } 507 /* check flags 1st (last arg) so query is pairs of spec,val */ 508 if (ddebug_parse_flags(words[nwords-1], &modifiers)) { 509 pr_err("flags parse failed\n"); 510 return -EINVAL; 511 } 512 if (ddebug_parse_query(words, nwords-1, &query, modname)) { 513 pr_err("query parse failed\n"); 514 return -EINVAL; 515 } 516 /* actually go and implement the change */ 517 nfound = ddebug_change(&query, &modifiers); 518 vpr_info_dq(&query, nfound ? "applied" : "no-match"); 519 520 return nfound; 521 } 522 523 /* handle multiple queries in query string, continue on error, return 524 last error or number of matching callsites. Module name is either 525 in param (for boot arg) or perhaps in query string. 526 */ 527 static int ddebug_exec_queries(char *query, const char *modname) 528 { 529 char *split; 530 int i, errs = 0, exitcode = 0, rc, nfound = 0; 531 532 for (i = 0; query; query = split) { 533 split = strpbrk(query, ";\n"); 534 if (split) 535 *split++ = '\0'; 536 537 query = skip_spaces(query); 538 if (!query || !*query || *query == '#') 539 continue; 540 541 vpr_info("query %d: \"%s\" mod:%s\n", i, query, modname ?: "*"); 542 543 rc = ddebug_exec_query(query, modname); 544 if (rc < 0) { 545 errs++; 546 exitcode = rc; 547 } else { 548 nfound += rc; 549 } 550 i++; 551 } 552 if (i) 553 v2pr_info("processed %d queries, with %d matches, %d errs\n", 554 i, nfound, errs); 555 556 if (exitcode) 557 return exitcode; 558 return nfound; 559 } 560 561 /** 562 * dynamic_debug_exec_queries - select and change dynamic-debug prints 563 * @query: query-string described in admin-guide/dynamic-debug-howto 564 * @modname: string containing module name, usually &module.mod_name 565 * 566 * This uses the >/proc/dynamic_debug/control reader, allowing module 567 * authors to modify their dynamic-debug callsites. The modname is 568 * canonically struct module.mod_name, but can also be null or a 569 * module-wildcard, for example: "drm*". 570 */ 571 int dynamic_debug_exec_queries(const char *query, const char *modname) 572 { 573 int rc; 574 char *qry; /* writable copy of query */ 575 576 if (!query) { 577 pr_err("non-null query/command string expected\n"); 578 return -EINVAL; 579 } 580 qry = kstrndup(query, PAGE_SIZE, GFP_KERNEL); 581 if (!qry) 582 return -ENOMEM; 583 584 rc = ddebug_exec_queries(qry, modname); 585 kfree(qry); 586 return rc; 587 } 588 EXPORT_SYMBOL_GPL(dynamic_debug_exec_queries); 589 590 #define PREFIX_SIZE 64 591 592 static int remaining(int wrote) 593 { 594 if (PREFIX_SIZE - wrote > 0) 595 return PREFIX_SIZE - wrote; 596 return 0; 597 } 598 599 static char *__dynamic_emit_prefix(const struct _ddebug *desc, char *buf) 600 { 601 int pos_after_tid; 602 int pos = 0; 603 604 if (desc->flags & _DPRINTK_FLAGS_INCL_TID) { 605 if (in_interrupt()) 606 pos += snprintf(buf + pos, remaining(pos), "<intr> "); 607 else 608 pos += snprintf(buf + pos, remaining(pos), "[%d] ", 609 task_pid_vnr(current)); 610 } 611 pos_after_tid = pos; 612 if (desc->flags & _DPRINTK_FLAGS_INCL_MODNAME) 613 pos += snprintf(buf + pos, remaining(pos), "%s:", 614 desc->modname); 615 if (desc->flags & _DPRINTK_FLAGS_INCL_FUNCNAME) 616 pos += snprintf(buf + pos, remaining(pos), "%s:", 617 desc->function); 618 if (desc->flags & _DPRINTK_FLAGS_INCL_LINENO) 619 pos += snprintf(buf + pos, remaining(pos), "%d:", 620 desc->lineno); 621 if (pos - pos_after_tid) 622 pos += snprintf(buf + pos, remaining(pos), " "); 623 if (pos >= PREFIX_SIZE) 624 buf[PREFIX_SIZE - 1] = '\0'; 625 626 return buf; 627 } 628 629 static inline char *dynamic_emit_prefix(struct _ddebug *desc, char *buf) 630 { 631 if (unlikely(desc->flags & _DPRINTK_FLAGS_INCL_ANY)) 632 return __dynamic_emit_prefix(desc, buf); 633 return buf; 634 } 635 636 void __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...) 637 { 638 va_list args; 639 struct va_format vaf; 640 char buf[PREFIX_SIZE] = ""; 641 642 BUG_ON(!descriptor); 643 BUG_ON(!fmt); 644 645 va_start(args, fmt); 646 647 vaf.fmt = fmt; 648 vaf.va = &args; 649 650 printk(KERN_DEBUG "%s%pV", dynamic_emit_prefix(descriptor, buf), &vaf); 651 652 va_end(args); 653 } 654 EXPORT_SYMBOL(__dynamic_pr_debug); 655 656 void __dynamic_dev_dbg(struct _ddebug *descriptor, 657 const struct device *dev, const char *fmt, ...) 658 { 659 struct va_format vaf; 660 va_list args; 661 662 BUG_ON(!descriptor); 663 BUG_ON(!fmt); 664 665 va_start(args, fmt); 666 667 vaf.fmt = fmt; 668 vaf.va = &args; 669 670 if (!dev) { 671 printk(KERN_DEBUG "(NULL device *): %pV", &vaf); 672 } else { 673 char buf[PREFIX_SIZE] = ""; 674 675 dev_printk_emit(LOGLEVEL_DEBUG, dev, "%s%s %s: %pV", 676 dynamic_emit_prefix(descriptor, buf), 677 dev_driver_string(dev), dev_name(dev), 678 &vaf); 679 } 680 681 va_end(args); 682 } 683 EXPORT_SYMBOL(__dynamic_dev_dbg); 684 685 #ifdef CONFIG_NET 686 687 void __dynamic_netdev_dbg(struct _ddebug *descriptor, 688 const struct net_device *dev, const char *fmt, ...) 689 { 690 struct va_format vaf; 691 va_list args; 692 693 BUG_ON(!descriptor); 694 BUG_ON(!fmt); 695 696 va_start(args, fmt); 697 698 vaf.fmt = fmt; 699 vaf.va = &args; 700 701 if (dev && dev->dev.parent) { 702 char buf[PREFIX_SIZE] = ""; 703 704 dev_printk_emit(LOGLEVEL_DEBUG, dev->dev.parent, 705 "%s%s %s %s%s: %pV", 706 dynamic_emit_prefix(descriptor, buf), 707 dev_driver_string(dev->dev.parent), 708 dev_name(dev->dev.parent), 709 netdev_name(dev), netdev_reg_state(dev), 710 &vaf); 711 } else if (dev) { 712 printk(KERN_DEBUG "%s%s: %pV", netdev_name(dev), 713 netdev_reg_state(dev), &vaf); 714 } else { 715 printk(KERN_DEBUG "(NULL net_device): %pV", &vaf); 716 } 717 718 va_end(args); 719 } 720 EXPORT_SYMBOL(__dynamic_netdev_dbg); 721 722 #endif 723 724 #if IS_ENABLED(CONFIG_INFINIBAND) 725 726 void __dynamic_ibdev_dbg(struct _ddebug *descriptor, 727 const struct ib_device *ibdev, const char *fmt, ...) 728 { 729 struct va_format vaf; 730 va_list args; 731 732 va_start(args, fmt); 733 734 vaf.fmt = fmt; 735 vaf.va = &args; 736 737 if (ibdev && ibdev->dev.parent) { 738 char buf[PREFIX_SIZE] = ""; 739 740 dev_printk_emit(LOGLEVEL_DEBUG, ibdev->dev.parent, 741 "%s%s %s %s: %pV", 742 dynamic_emit_prefix(descriptor, buf), 743 dev_driver_string(ibdev->dev.parent), 744 dev_name(ibdev->dev.parent), 745 dev_name(&ibdev->dev), 746 &vaf); 747 } else if (ibdev) { 748 printk(KERN_DEBUG "%s: %pV", dev_name(&ibdev->dev), &vaf); 749 } else { 750 printk(KERN_DEBUG "(NULL ib_device): %pV", &vaf); 751 } 752 753 va_end(args); 754 } 755 EXPORT_SYMBOL(__dynamic_ibdev_dbg); 756 757 #endif 758 759 /* 760 * Install a noop handler to make dyndbg look like a normal kernel cli param. 761 * This avoids warnings about dyndbg being an unknown cli param when supplied 762 * by a user. 763 */ 764 static __init int dyndbg_setup(char *str) 765 { 766 return 1; 767 } 768 769 __setup("dyndbg=", dyndbg_setup); 770 771 /* 772 * File_ops->write method for <debugfs>/dynamic_debug/control. Gathers the 773 * command text from userspace, parses and executes it. 774 */ 775 #define USER_BUF_PAGE 4096 776 static ssize_t ddebug_proc_write(struct file *file, const char __user *ubuf, 777 size_t len, loff_t *offp) 778 { 779 char *tmpbuf; 780 int ret; 781 782 if (len == 0) 783 return 0; 784 if (len > USER_BUF_PAGE - 1) { 785 pr_warn("expected <%d bytes into control\n", USER_BUF_PAGE); 786 return -E2BIG; 787 } 788 tmpbuf = memdup_user_nul(ubuf, len); 789 if (IS_ERR(tmpbuf)) 790 return PTR_ERR(tmpbuf); 791 v2pr_info("read %zu bytes from userspace\n", len); 792 793 ret = ddebug_exec_queries(tmpbuf, NULL); 794 kfree(tmpbuf); 795 if (ret < 0) 796 return ret; 797 798 *offp += len; 799 return len; 800 } 801 802 /* 803 * Set the iterator to point to the first _ddebug object 804 * and return a pointer to that first object. Returns 805 * NULL if there are no _ddebugs at all. 806 */ 807 static struct _ddebug *ddebug_iter_first(struct ddebug_iter *iter) 808 { 809 if (list_empty(&ddebug_tables)) { 810 iter->table = NULL; 811 return NULL; 812 } 813 iter->table = list_entry(ddebug_tables.next, 814 struct ddebug_table, link); 815 iter->idx = iter->table->num_ddebugs; 816 return &iter->table->ddebugs[--iter->idx]; 817 } 818 819 /* 820 * Advance the iterator to point to the next _ddebug 821 * object from the one the iterator currently points at, 822 * and returns a pointer to the new _ddebug. Returns 823 * NULL if the iterator has seen all the _ddebugs. 824 */ 825 static struct _ddebug *ddebug_iter_next(struct ddebug_iter *iter) 826 { 827 if (iter->table == NULL) 828 return NULL; 829 if (--iter->idx < 0) { 830 /* iterate to next table */ 831 if (list_is_last(&iter->table->link, &ddebug_tables)) { 832 iter->table = NULL; 833 return NULL; 834 } 835 iter->table = list_entry(iter->table->link.next, 836 struct ddebug_table, link); 837 iter->idx = iter->table->num_ddebugs; 838 --iter->idx; 839 } 840 return &iter->table->ddebugs[iter->idx]; 841 } 842 843 /* 844 * Seq_ops start method. Called at the start of every 845 * read() call from userspace. Takes the ddebug_lock and 846 * seeks the seq_file's iterator to the given position. 847 */ 848 static void *ddebug_proc_start(struct seq_file *m, loff_t *pos) 849 { 850 struct ddebug_iter *iter = m->private; 851 struct _ddebug *dp; 852 int n = *pos; 853 854 mutex_lock(&ddebug_lock); 855 856 if (!n) 857 return SEQ_START_TOKEN; 858 if (n < 0) 859 return NULL; 860 dp = ddebug_iter_first(iter); 861 while (dp != NULL && --n > 0) 862 dp = ddebug_iter_next(iter); 863 return dp; 864 } 865 866 /* 867 * Seq_ops next method. Called several times within a read() 868 * call from userspace, with ddebug_lock held. Walks to the 869 * next _ddebug object with a special case for the header line. 870 */ 871 static void *ddebug_proc_next(struct seq_file *m, void *p, loff_t *pos) 872 { 873 struct ddebug_iter *iter = m->private; 874 struct _ddebug *dp; 875 876 if (p == SEQ_START_TOKEN) 877 dp = ddebug_iter_first(iter); 878 else 879 dp = ddebug_iter_next(iter); 880 ++*pos; 881 return dp; 882 } 883 884 /* 885 * Seq_ops show method. Called several times within a read() 886 * call from userspace, with ddebug_lock held. Formats the 887 * current _ddebug as a single human-readable line, with a 888 * special case for the header line. 889 */ 890 static int ddebug_proc_show(struct seq_file *m, void *p) 891 { 892 struct ddebug_iter *iter = m->private; 893 struct _ddebug *dp = p; 894 struct flagsbuf flags; 895 896 if (p == SEQ_START_TOKEN) { 897 seq_puts(m, 898 "# filename:lineno [module]function flags format\n"); 899 return 0; 900 } 901 902 seq_printf(m, "%s:%u [%s]%s =%s \"", 903 trim_prefix(dp->filename), dp->lineno, 904 iter->table->mod_name, dp->function, 905 ddebug_describe_flags(dp->flags, &flags)); 906 seq_escape_str(m, dp->format, ESCAPE_SPACE, "\t\r\n\""); 907 seq_puts(m, "\"\n"); 908 909 return 0; 910 } 911 912 /* 913 * Seq_ops stop method. Called at the end of each read() 914 * call from userspace. Drops ddebug_lock. 915 */ 916 static void ddebug_proc_stop(struct seq_file *m, void *p) 917 { 918 mutex_unlock(&ddebug_lock); 919 } 920 921 static const struct seq_operations ddebug_proc_seqops = { 922 .start = ddebug_proc_start, 923 .next = ddebug_proc_next, 924 .show = ddebug_proc_show, 925 .stop = ddebug_proc_stop 926 }; 927 928 static int ddebug_proc_open(struct inode *inode, struct file *file) 929 { 930 return seq_open_private(file, &ddebug_proc_seqops, 931 sizeof(struct ddebug_iter)); 932 } 933 934 static const struct file_operations ddebug_proc_fops = { 935 .owner = THIS_MODULE, 936 .open = ddebug_proc_open, 937 .read = seq_read, 938 .llseek = seq_lseek, 939 .release = seq_release_private, 940 .write = ddebug_proc_write 941 }; 942 943 static const struct proc_ops proc_fops = { 944 .proc_open = ddebug_proc_open, 945 .proc_read = seq_read, 946 .proc_lseek = seq_lseek, 947 .proc_release = seq_release_private, 948 .proc_write = ddebug_proc_write 949 }; 950 951 /* 952 * Allocate a new ddebug_table for the given module 953 * and add it to the global list. 954 */ 955 int ddebug_add_module(struct _ddebug *tab, unsigned int n, 956 const char *name) 957 { 958 struct ddebug_table *dt; 959 960 dt = kzalloc(sizeof(*dt), GFP_KERNEL); 961 if (dt == NULL) { 962 pr_err("error adding module: %s\n", name); 963 return -ENOMEM; 964 } 965 /* 966 * For built-in modules, name lives in .rodata and is 967 * immortal. For loaded modules, name points at the name[] 968 * member of struct module, which lives at least as long as 969 * this struct ddebug_table. 970 */ 971 dt->mod_name = name; 972 dt->num_ddebugs = n; 973 dt->ddebugs = tab; 974 975 mutex_lock(&ddebug_lock); 976 list_add_tail(&dt->link, &ddebug_tables); 977 mutex_unlock(&ddebug_lock); 978 979 vpr_info("%3u debug prints in module %s\n", n, dt->mod_name); 980 return 0; 981 } 982 983 /* helper for ddebug_dyndbg_(boot|module)_param_cb */ 984 static int ddebug_dyndbg_param_cb(char *param, char *val, 985 const char *modname, int on_err) 986 { 987 char *sep; 988 989 sep = strchr(param, '.'); 990 if (sep) { 991 /* needed only for ddebug_dyndbg_boot_param_cb */ 992 *sep = '\0'; 993 modname = param; 994 param = sep + 1; 995 } 996 if (strcmp(param, "dyndbg")) 997 return on_err; /* determined by caller */ 998 999 ddebug_exec_queries((val ? val : "+p"), modname); 1000 1001 return 0; /* query failure shouldn't stop module load */ 1002 } 1003 1004 /* handle both dyndbg and $module.dyndbg params at boot */ 1005 static int ddebug_dyndbg_boot_param_cb(char *param, char *val, 1006 const char *unused, void *arg) 1007 { 1008 vpr_info("%s=\"%s\"\n", param, val); 1009 return ddebug_dyndbg_param_cb(param, val, NULL, 0); 1010 } 1011 1012 /* 1013 * modprobe foo finds foo.params in boot-args, strips "foo.", and 1014 * passes them to load_module(). This callback gets unknown params, 1015 * processes dyndbg params, rejects others. 1016 */ 1017 int ddebug_dyndbg_module_param_cb(char *param, char *val, const char *module) 1018 { 1019 vpr_info("module: %s %s=\"%s\"\n", module, param, val); 1020 return ddebug_dyndbg_param_cb(param, val, module, -ENOENT); 1021 } 1022 1023 static void ddebug_table_free(struct ddebug_table *dt) 1024 { 1025 list_del_init(&dt->link); 1026 kfree(dt); 1027 } 1028 1029 /* 1030 * Called in response to a module being unloaded. Removes 1031 * any ddebug_table's which point at the module. 1032 */ 1033 int ddebug_remove_module(const char *mod_name) 1034 { 1035 struct ddebug_table *dt, *nextdt; 1036 int ret = -ENOENT; 1037 1038 mutex_lock(&ddebug_lock); 1039 list_for_each_entry_safe(dt, nextdt, &ddebug_tables, link) { 1040 if (dt->mod_name == mod_name) { 1041 ddebug_table_free(dt); 1042 ret = 0; 1043 break; 1044 } 1045 } 1046 mutex_unlock(&ddebug_lock); 1047 if (!ret) 1048 v2pr_info("removed module \"%s\"\n", mod_name); 1049 return ret; 1050 } 1051 1052 static void ddebug_remove_all_tables(void) 1053 { 1054 mutex_lock(&ddebug_lock); 1055 while (!list_empty(&ddebug_tables)) { 1056 struct ddebug_table *dt = list_entry(ddebug_tables.next, 1057 struct ddebug_table, 1058 link); 1059 ddebug_table_free(dt); 1060 } 1061 mutex_unlock(&ddebug_lock); 1062 } 1063 1064 static __initdata int ddebug_init_success; 1065 1066 static int __init dynamic_debug_init_control(void) 1067 { 1068 struct proc_dir_entry *procfs_dir; 1069 struct dentry *debugfs_dir; 1070 1071 if (!ddebug_init_success) 1072 return -ENODEV; 1073 1074 /* Create the control file in debugfs if it is enabled */ 1075 if (debugfs_initialized()) { 1076 debugfs_dir = debugfs_create_dir("dynamic_debug", NULL); 1077 debugfs_create_file("control", 0644, debugfs_dir, NULL, 1078 &ddebug_proc_fops); 1079 } 1080 1081 /* Also create the control file in procfs */ 1082 procfs_dir = proc_mkdir("dynamic_debug", NULL); 1083 if (procfs_dir) 1084 proc_create("control", 0644, procfs_dir, &proc_fops); 1085 1086 return 0; 1087 } 1088 1089 static int __init dynamic_debug_init(void) 1090 { 1091 struct _ddebug *iter, *iter_start; 1092 const char *modname = NULL; 1093 char *cmdline; 1094 int ret = 0; 1095 int n = 0, entries = 0, modct = 0; 1096 1097 if (&__start___dyndbg == &__stop___dyndbg) { 1098 if (IS_ENABLED(CONFIG_DYNAMIC_DEBUG)) { 1099 pr_warn("_ddebug table is empty in a CONFIG_DYNAMIC_DEBUG build\n"); 1100 return 1; 1101 } 1102 pr_info("Ignore empty _ddebug table in a CONFIG_DYNAMIC_DEBUG_CORE build\n"); 1103 ddebug_init_success = 1; 1104 return 0; 1105 } 1106 iter = __start___dyndbg; 1107 modname = iter->modname; 1108 iter_start = iter; 1109 for (; iter < __stop___dyndbg; iter++) { 1110 entries++; 1111 if (strcmp(modname, iter->modname)) { 1112 modct++; 1113 ret = ddebug_add_module(iter_start, n, modname); 1114 if (ret) 1115 goto out_err; 1116 n = 0; 1117 modname = iter->modname; 1118 iter_start = iter; 1119 } 1120 n++; 1121 } 1122 ret = ddebug_add_module(iter_start, n, modname); 1123 if (ret) 1124 goto out_err; 1125 1126 ddebug_init_success = 1; 1127 vpr_info("%d prdebugs in %d modules, %d KiB in ddebug tables, %d kiB in __dyndbg section\n", 1128 entries, modct, (int)((modct * sizeof(struct ddebug_table)) >> 10), 1129 (int)((entries * sizeof(struct _ddebug)) >> 10)); 1130 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, 1141 0, 0, 0, NULL, &ddebug_dyndbg_boot_param_cb); 1142 kfree(cmdline); 1143 return 0; 1144 1145 out_err: 1146 ddebug_remove_all_tables(); 1147 return 0; 1148 } 1149 /* Allow early initialization for boot messages via boot param */ 1150 early_initcall(dynamic_debug_init); 1151 1152 /* Debugfs setup must be done later */ 1153 fs_initcall(dynamic_debug_init_control); 1154