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 #define PREFIX_SIZE 64 562 563 static int remaining(int wrote) 564 { 565 if (PREFIX_SIZE - wrote > 0) 566 return PREFIX_SIZE - wrote; 567 return 0; 568 } 569 570 static char *__dynamic_emit_prefix(const struct _ddebug *desc, char *buf) 571 { 572 int pos_after_tid; 573 int pos = 0; 574 575 if (desc->flags & _DPRINTK_FLAGS_INCL_TID) { 576 if (in_interrupt()) 577 pos += snprintf(buf + pos, remaining(pos), "<intr> "); 578 else 579 pos += snprintf(buf + pos, remaining(pos), "[%d] ", 580 task_pid_vnr(current)); 581 } 582 pos_after_tid = pos; 583 if (desc->flags & _DPRINTK_FLAGS_INCL_MODNAME) 584 pos += snprintf(buf + pos, remaining(pos), "%s:", 585 desc->modname); 586 if (desc->flags & _DPRINTK_FLAGS_INCL_FUNCNAME) 587 pos += snprintf(buf + pos, remaining(pos), "%s:", 588 desc->function); 589 if (desc->flags & _DPRINTK_FLAGS_INCL_LINENO) 590 pos += snprintf(buf + pos, remaining(pos), "%d:", 591 desc->lineno); 592 if (pos - pos_after_tid) 593 pos += snprintf(buf + pos, remaining(pos), " "); 594 if (pos >= PREFIX_SIZE) 595 buf[PREFIX_SIZE - 1] = '\0'; 596 597 return buf; 598 } 599 600 static inline char *dynamic_emit_prefix(struct _ddebug *desc, char *buf) 601 { 602 if (unlikely(desc->flags & _DPRINTK_FLAGS_INCL_ANY)) 603 return __dynamic_emit_prefix(desc, buf); 604 return buf; 605 } 606 607 void __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...) 608 { 609 va_list args; 610 struct va_format vaf; 611 char buf[PREFIX_SIZE] = ""; 612 613 BUG_ON(!descriptor); 614 BUG_ON(!fmt); 615 616 va_start(args, fmt); 617 618 vaf.fmt = fmt; 619 vaf.va = &args; 620 621 printk(KERN_DEBUG "%s%pV", dynamic_emit_prefix(descriptor, buf), &vaf); 622 623 va_end(args); 624 } 625 EXPORT_SYMBOL(__dynamic_pr_debug); 626 627 void __dynamic_dev_dbg(struct _ddebug *descriptor, 628 const struct device *dev, const char *fmt, ...) 629 { 630 struct va_format vaf; 631 va_list args; 632 633 BUG_ON(!descriptor); 634 BUG_ON(!fmt); 635 636 va_start(args, fmt); 637 638 vaf.fmt = fmt; 639 vaf.va = &args; 640 641 if (!dev) { 642 printk(KERN_DEBUG "(NULL device *): %pV", &vaf); 643 } else { 644 char buf[PREFIX_SIZE] = ""; 645 646 dev_printk_emit(LOGLEVEL_DEBUG, dev, "%s%s %s: %pV", 647 dynamic_emit_prefix(descriptor, buf), 648 dev_driver_string(dev), dev_name(dev), 649 &vaf); 650 } 651 652 va_end(args); 653 } 654 EXPORT_SYMBOL(__dynamic_dev_dbg); 655 656 #ifdef CONFIG_NET 657 658 void __dynamic_netdev_dbg(struct _ddebug *descriptor, 659 const struct net_device *dev, const char *fmt, ...) 660 { 661 struct va_format vaf; 662 va_list args; 663 664 BUG_ON(!descriptor); 665 BUG_ON(!fmt); 666 667 va_start(args, fmt); 668 669 vaf.fmt = fmt; 670 vaf.va = &args; 671 672 if (dev && dev->dev.parent) { 673 char buf[PREFIX_SIZE] = ""; 674 675 dev_printk_emit(LOGLEVEL_DEBUG, dev->dev.parent, 676 "%s%s %s %s%s: %pV", 677 dynamic_emit_prefix(descriptor, buf), 678 dev_driver_string(dev->dev.parent), 679 dev_name(dev->dev.parent), 680 netdev_name(dev), netdev_reg_state(dev), 681 &vaf); 682 } else if (dev) { 683 printk(KERN_DEBUG "%s%s: %pV", netdev_name(dev), 684 netdev_reg_state(dev), &vaf); 685 } else { 686 printk(KERN_DEBUG "(NULL net_device): %pV", &vaf); 687 } 688 689 va_end(args); 690 } 691 EXPORT_SYMBOL(__dynamic_netdev_dbg); 692 693 #endif 694 695 #if IS_ENABLED(CONFIG_INFINIBAND) 696 697 void __dynamic_ibdev_dbg(struct _ddebug *descriptor, 698 const struct ib_device *ibdev, const char *fmt, ...) 699 { 700 struct va_format vaf; 701 va_list args; 702 703 va_start(args, fmt); 704 705 vaf.fmt = fmt; 706 vaf.va = &args; 707 708 if (ibdev && ibdev->dev.parent) { 709 char buf[PREFIX_SIZE] = ""; 710 711 dev_printk_emit(LOGLEVEL_DEBUG, ibdev->dev.parent, 712 "%s%s %s %s: %pV", 713 dynamic_emit_prefix(descriptor, buf), 714 dev_driver_string(ibdev->dev.parent), 715 dev_name(ibdev->dev.parent), 716 dev_name(&ibdev->dev), 717 &vaf); 718 } else if (ibdev) { 719 printk(KERN_DEBUG "%s: %pV", dev_name(&ibdev->dev), &vaf); 720 } else { 721 printk(KERN_DEBUG "(NULL ib_device): %pV", &vaf); 722 } 723 724 va_end(args); 725 } 726 EXPORT_SYMBOL(__dynamic_ibdev_dbg); 727 728 #endif 729 730 /* 731 * Install a noop handler to make dyndbg look like a normal kernel cli param. 732 * This avoids warnings about dyndbg being an unknown cli param when supplied 733 * by a user. 734 */ 735 static __init int dyndbg_setup(char *str) 736 { 737 return 1; 738 } 739 740 __setup("dyndbg=", dyndbg_setup); 741 742 /* 743 * File_ops->write method for <debugfs>/dynamic_debug/control. Gathers the 744 * command text from userspace, parses and executes it. 745 */ 746 #define USER_BUF_PAGE 4096 747 static ssize_t ddebug_proc_write(struct file *file, const char __user *ubuf, 748 size_t len, loff_t *offp) 749 { 750 char *tmpbuf; 751 int ret; 752 753 if (len == 0) 754 return 0; 755 if (len > USER_BUF_PAGE - 1) { 756 pr_warn("expected <%d bytes into control\n", USER_BUF_PAGE); 757 return -E2BIG; 758 } 759 tmpbuf = memdup_user_nul(ubuf, len); 760 if (IS_ERR(tmpbuf)) 761 return PTR_ERR(tmpbuf); 762 v2pr_info("read %zu bytes from userspace\n", len); 763 764 ret = ddebug_exec_queries(tmpbuf, NULL); 765 kfree(tmpbuf); 766 if (ret < 0) 767 return ret; 768 769 *offp += len; 770 return len; 771 } 772 773 /* 774 * Set the iterator to point to the first _ddebug object 775 * and return a pointer to that first object. Returns 776 * NULL if there are no _ddebugs at all. 777 */ 778 static struct _ddebug *ddebug_iter_first(struct ddebug_iter *iter) 779 { 780 if (list_empty(&ddebug_tables)) { 781 iter->table = NULL; 782 return NULL; 783 } 784 iter->table = list_entry(ddebug_tables.next, 785 struct ddebug_table, link); 786 iter->idx = iter->table->num_ddebugs; 787 return &iter->table->ddebugs[--iter->idx]; 788 } 789 790 /* 791 * Advance the iterator to point to the next _ddebug 792 * object from the one the iterator currently points at, 793 * and returns a pointer to the new _ddebug. Returns 794 * NULL if the iterator has seen all the _ddebugs. 795 */ 796 static struct _ddebug *ddebug_iter_next(struct ddebug_iter *iter) 797 { 798 if (iter->table == NULL) 799 return NULL; 800 if (--iter->idx < 0) { 801 /* iterate to next table */ 802 if (list_is_last(&iter->table->link, &ddebug_tables)) { 803 iter->table = NULL; 804 return NULL; 805 } 806 iter->table = list_entry(iter->table->link.next, 807 struct ddebug_table, link); 808 iter->idx = iter->table->num_ddebugs; 809 --iter->idx; 810 } 811 return &iter->table->ddebugs[iter->idx]; 812 } 813 814 /* 815 * Seq_ops start method. Called at the start of every 816 * read() call from userspace. Takes the ddebug_lock and 817 * seeks the seq_file's iterator to the given position. 818 */ 819 static void *ddebug_proc_start(struct seq_file *m, loff_t *pos) 820 { 821 struct ddebug_iter *iter = m->private; 822 struct _ddebug *dp; 823 int n = *pos; 824 825 mutex_lock(&ddebug_lock); 826 827 if (!n) 828 return SEQ_START_TOKEN; 829 if (n < 0) 830 return NULL; 831 dp = ddebug_iter_first(iter); 832 while (dp != NULL && --n > 0) 833 dp = ddebug_iter_next(iter); 834 return dp; 835 } 836 837 /* 838 * Seq_ops next method. Called several times within a read() 839 * call from userspace, with ddebug_lock held. Walks to the 840 * next _ddebug object with a special case for the header line. 841 */ 842 static void *ddebug_proc_next(struct seq_file *m, void *p, loff_t *pos) 843 { 844 struct ddebug_iter *iter = m->private; 845 struct _ddebug *dp; 846 847 if (p == SEQ_START_TOKEN) 848 dp = ddebug_iter_first(iter); 849 else 850 dp = ddebug_iter_next(iter); 851 ++*pos; 852 return dp; 853 } 854 855 /* 856 * Seq_ops show method. Called several times within a read() 857 * call from userspace, with ddebug_lock held. Formats the 858 * current _ddebug as a single human-readable line, with a 859 * special case for the header line. 860 */ 861 static int ddebug_proc_show(struct seq_file *m, void *p) 862 { 863 struct ddebug_iter *iter = m->private; 864 struct _ddebug *dp = p; 865 struct flagsbuf flags; 866 867 if (p == SEQ_START_TOKEN) { 868 seq_puts(m, 869 "# filename:lineno [module]function flags format\n"); 870 return 0; 871 } 872 873 seq_printf(m, "%s:%u [%s]%s =%s \"", 874 trim_prefix(dp->filename), dp->lineno, 875 iter->table->mod_name, dp->function, 876 ddebug_describe_flags(dp->flags, &flags)); 877 seq_escape_str(m, dp->format, ESCAPE_SPACE, "\t\r\n\""); 878 seq_puts(m, "\"\n"); 879 880 return 0; 881 } 882 883 /* 884 * Seq_ops stop method. Called at the end of each read() 885 * call from userspace. Drops ddebug_lock. 886 */ 887 static void ddebug_proc_stop(struct seq_file *m, void *p) 888 { 889 mutex_unlock(&ddebug_lock); 890 } 891 892 static const struct seq_operations ddebug_proc_seqops = { 893 .start = ddebug_proc_start, 894 .next = ddebug_proc_next, 895 .show = ddebug_proc_show, 896 .stop = ddebug_proc_stop 897 }; 898 899 static int ddebug_proc_open(struct inode *inode, struct file *file) 900 { 901 return seq_open_private(file, &ddebug_proc_seqops, 902 sizeof(struct ddebug_iter)); 903 } 904 905 static const struct file_operations ddebug_proc_fops = { 906 .owner = THIS_MODULE, 907 .open = ddebug_proc_open, 908 .read = seq_read, 909 .llseek = seq_lseek, 910 .release = seq_release_private, 911 .write = ddebug_proc_write 912 }; 913 914 static const struct proc_ops proc_fops = { 915 .proc_open = ddebug_proc_open, 916 .proc_read = seq_read, 917 .proc_lseek = seq_lseek, 918 .proc_release = seq_release_private, 919 .proc_write = ddebug_proc_write 920 }; 921 922 /* 923 * Allocate a new ddebug_table for the given module 924 * and add it to the global list. 925 */ 926 static int __ddebug_add_module(struct _ddebug_info *di, unsigned int base, 927 const char *modname) 928 { 929 struct ddebug_table *dt; 930 931 v3pr_info("add-module: %s.%d sites\n", modname, di->num_descs); 932 if (!di->num_descs) { 933 v3pr_info(" skip %s\n", modname); 934 return 0; 935 } 936 937 dt = kzalloc(sizeof(*dt), GFP_KERNEL); 938 if (dt == NULL) { 939 pr_err("error adding module: %s\n", modname); 940 return -ENOMEM; 941 } 942 /* 943 * For built-in modules, name lives in .rodata and is 944 * immortal. For loaded modules, name points at the name[] 945 * member of struct module, which lives at least as long as 946 * this struct ddebug_table. 947 */ 948 dt->mod_name = modname; 949 dt->ddebugs = di->descs; 950 dt->num_ddebugs = di->num_descs; 951 952 INIT_LIST_HEAD(&dt->link); 953 954 mutex_lock(&ddebug_lock); 955 list_add_tail(&dt->link, &ddebug_tables); 956 mutex_unlock(&ddebug_lock); 957 958 vpr_info("%3u debug prints in module %s\n", di->num_descs, modname); 959 return 0; 960 } 961 962 int ddebug_add_module(struct _ddebug_info *di, const char *modname) 963 { 964 return __ddebug_add_module(di, 0, modname); 965 } 966 967 /* helper for ddebug_dyndbg_(boot|module)_param_cb */ 968 static int ddebug_dyndbg_param_cb(char *param, char *val, 969 const char *modname, int on_err) 970 { 971 char *sep; 972 973 sep = strchr(param, '.'); 974 if (sep) { 975 /* needed only for ddebug_dyndbg_boot_param_cb */ 976 *sep = '\0'; 977 modname = param; 978 param = sep + 1; 979 } 980 if (strcmp(param, "dyndbg")) 981 return on_err; /* determined by caller */ 982 983 ddebug_exec_queries((val ? val : "+p"), modname); 984 985 return 0; /* query failure shouldn't stop module load */ 986 } 987 988 /* handle both dyndbg and $module.dyndbg params at boot */ 989 static int ddebug_dyndbg_boot_param_cb(char *param, char *val, 990 const char *unused, void *arg) 991 { 992 vpr_info("%s=\"%s\"\n", param, val); 993 return ddebug_dyndbg_param_cb(param, val, NULL, 0); 994 } 995 996 /* 997 * modprobe foo finds foo.params in boot-args, strips "foo.", and 998 * passes them to load_module(). This callback gets unknown params, 999 * processes dyndbg params, rejects others. 1000 */ 1001 int ddebug_dyndbg_module_param_cb(char *param, char *val, const char *module) 1002 { 1003 vpr_info("module: %s %s=\"%s\"\n", module, param, val); 1004 return ddebug_dyndbg_param_cb(param, val, module, -ENOENT); 1005 } 1006 1007 static void ddebug_table_free(struct ddebug_table *dt) 1008 { 1009 list_del_init(&dt->link); 1010 kfree(dt); 1011 } 1012 1013 /* 1014 * Called in response to a module being unloaded. Removes 1015 * any ddebug_table's which point at the module. 1016 */ 1017 int ddebug_remove_module(const char *mod_name) 1018 { 1019 struct ddebug_table *dt, *nextdt; 1020 int ret = -ENOENT; 1021 1022 mutex_lock(&ddebug_lock); 1023 list_for_each_entry_safe(dt, nextdt, &ddebug_tables, link) { 1024 if (dt->mod_name == mod_name) { 1025 ddebug_table_free(dt); 1026 ret = 0; 1027 break; 1028 } 1029 } 1030 mutex_unlock(&ddebug_lock); 1031 if (!ret) 1032 v2pr_info("removed module \"%s\"\n", mod_name); 1033 return ret; 1034 } 1035 1036 static void ddebug_remove_all_tables(void) 1037 { 1038 mutex_lock(&ddebug_lock); 1039 while (!list_empty(&ddebug_tables)) { 1040 struct ddebug_table *dt = list_entry(ddebug_tables.next, 1041 struct ddebug_table, 1042 link); 1043 ddebug_table_free(dt); 1044 } 1045 mutex_unlock(&ddebug_lock); 1046 } 1047 1048 static __initdata int ddebug_init_success; 1049 1050 static int __init dynamic_debug_init_control(void) 1051 { 1052 struct proc_dir_entry *procfs_dir; 1053 struct dentry *debugfs_dir; 1054 1055 if (!ddebug_init_success) 1056 return -ENODEV; 1057 1058 /* Create the control file in debugfs if it is enabled */ 1059 if (debugfs_initialized()) { 1060 debugfs_dir = debugfs_create_dir("dynamic_debug", NULL); 1061 debugfs_create_file("control", 0644, debugfs_dir, NULL, 1062 &ddebug_proc_fops); 1063 } 1064 1065 /* Also create the control file in procfs */ 1066 procfs_dir = proc_mkdir("dynamic_debug", NULL); 1067 if (procfs_dir) 1068 proc_create("control", 0644, procfs_dir, &proc_fops); 1069 1070 return 0; 1071 } 1072 1073 static int __init dynamic_debug_init(void) 1074 { 1075 struct _ddebug *iter, *iter_mod_start; 1076 int ret, i, mod_sites, mod_ct; 1077 const char *modname; 1078 char *cmdline; 1079 1080 struct _ddebug_info di = { 1081 .descs = __start___dyndbg, 1082 .num_descs = __stop___dyndbg - __start___dyndbg, 1083 }; 1084 1085 if (&__start___dyndbg == &__stop___dyndbg) { 1086 if (IS_ENABLED(CONFIG_DYNAMIC_DEBUG)) { 1087 pr_warn("_ddebug table is empty in a CONFIG_DYNAMIC_DEBUG build\n"); 1088 return 1; 1089 } 1090 pr_info("Ignore empty _ddebug table in a CONFIG_DYNAMIC_DEBUG_CORE build\n"); 1091 ddebug_init_success = 1; 1092 return 0; 1093 } 1094 1095 iter = iter_mod_start = __start___dyndbg; 1096 modname = iter->modname; 1097 i = mod_sites = mod_ct = 0; 1098 1099 for (; iter < __stop___dyndbg; iter++, i++, mod_sites++) { 1100 1101 if (strcmp(modname, iter->modname)) { 1102 mod_ct++; 1103 di.num_descs = mod_sites; 1104 di.descs = iter_mod_start; 1105 ret = __ddebug_add_module(&di, i - mod_sites, modname); 1106 if (ret) 1107 goto out_err; 1108 1109 mod_sites = 0; 1110 modname = iter->modname; 1111 iter_mod_start = iter; 1112 } 1113 } 1114 di.num_descs = mod_sites; 1115 di.descs = iter_mod_start; 1116 ret = __ddebug_add_module(&di, i - mod_sites, modname); 1117 if (ret) 1118 goto out_err; 1119 1120 ddebug_init_success = 1; 1121 vpr_info("%d prdebugs in %d modules, %d KiB in ddebug tables, %d kiB in __dyndbg section\n", 1122 i, mod_ct, (int)((mod_ct * sizeof(struct ddebug_table)) >> 10), 1123 (int)((i * sizeof(struct _ddebug)) >> 10)); 1124 1125 /* now that ddebug tables are loaded, process all boot args 1126 * again to find and activate queries given in dyndbg params. 1127 * While this has already been done for known boot params, it 1128 * ignored the unknown ones (dyndbg in particular). Reusing 1129 * parse_args avoids ad-hoc parsing. This will also attempt 1130 * to activate queries for not-yet-loaded modules, which is 1131 * slightly noisy if verbose, but harmless. 1132 */ 1133 cmdline = kstrdup(saved_command_line, GFP_KERNEL); 1134 parse_args("dyndbg params", cmdline, NULL, 1135 0, 0, 0, NULL, &ddebug_dyndbg_boot_param_cb); 1136 kfree(cmdline); 1137 return 0; 1138 1139 out_err: 1140 ddebug_remove_all_tables(); 1141 return 0; 1142 } 1143 /* Allow early initialization for boot messages via boot param */ 1144 early_initcall(dynamic_debug_init); 1145 1146 /* Debugfs setup must be done later */ 1147 fs_initcall(dynamic_debug_init_control); 1148