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 int ddebug_add_module(struct _ddebug *tab, unsigned int n, 927 const char *name) 928 { 929 struct ddebug_table *dt; 930 931 dt = kzalloc(sizeof(*dt), GFP_KERNEL); 932 if (dt == NULL) { 933 pr_err("error adding module: %s\n", name); 934 return -ENOMEM; 935 } 936 /* 937 * For built-in modules, name lives in .rodata and is 938 * immortal. For loaded modules, name points at the name[] 939 * member of struct module, which lives at least as long as 940 * this struct ddebug_table. 941 */ 942 dt->mod_name = name; 943 dt->num_ddebugs = n; 944 dt->ddebugs = tab; 945 946 mutex_lock(&ddebug_lock); 947 list_add_tail(&dt->link, &ddebug_tables); 948 mutex_unlock(&ddebug_lock); 949 950 vpr_info("%3u debug prints in module %s\n", n, dt->mod_name); 951 return 0; 952 } 953 954 /* helper for ddebug_dyndbg_(boot|module)_param_cb */ 955 static int ddebug_dyndbg_param_cb(char *param, char *val, 956 const char *modname, int on_err) 957 { 958 char *sep; 959 960 sep = strchr(param, '.'); 961 if (sep) { 962 /* needed only for ddebug_dyndbg_boot_param_cb */ 963 *sep = '\0'; 964 modname = param; 965 param = sep + 1; 966 } 967 if (strcmp(param, "dyndbg")) 968 return on_err; /* determined by caller */ 969 970 ddebug_exec_queries((val ? val : "+p"), modname); 971 972 return 0; /* query failure shouldn't stop module load */ 973 } 974 975 /* handle both dyndbg and $module.dyndbg params at boot */ 976 static int ddebug_dyndbg_boot_param_cb(char *param, char *val, 977 const char *unused, void *arg) 978 { 979 vpr_info("%s=\"%s\"\n", param, val); 980 return ddebug_dyndbg_param_cb(param, val, NULL, 0); 981 } 982 983 /* 984 * modprobe foo finds foo.params in boot-args, strips "foo.", and 985 * passes them to load_module(). This callback gets unknown params, 986 * processes dyndbg params, rejects others. 987 */ 988 int ddebug_dyndbg_module_param_cb(char *param, char *val, const char *module) 989 { 990 vpr_info("module: %s %s=\"%s\"\n", module, param, val); 991 return ddebug_dyndbg_param_cb(param, val, module, -ENOENT); 992 } 993 994 static void ddebug_table_free(struct ddebug_table *dt) 995 { 996 list_del_init(&dt->link); 997 kfree(dt); 998 } 999 1000 /* 1001 * Called in response to a module being unloaded. Removes 1002 * any ddebug_table's which point at the module. 1003 */ 1004 int ddebug_remove_module(const char *mod_name) 1005 { 1006 struct ddebug_table *dt, *nextdt; 1007 int ret = -ENOENT; 1008 1009 mutex_lock(&ddebug_lock); 1010 list_for_each_entry_safe(dt, nextdt, &ddebug_tables, link) { 1011 if (dt->mod_name == mod_name) { 1012 ddebug_table_free(dt); 1013 ret = 0; 1014 break; 1015 } 1016 } 1017 mutex_unlock(&ddebug_lock); 1018 if (!ret) 1019 v2pr_info("removed module \"%s\"\n", mod_name); 1020 return ret; 1021 } 1022 1023 static void ddebug_remove_all_tables(void) 1024 { 1025 mutex_lock(&ddebug_lock); 1026 while (!list_empty(&ddebug_tables)) { 1027 struct ddebug_table *dt = list_entry(ddebug_tables.next, 1028 struct ddebug_table, 1029 link); 1030 ddebug_table_free(dt); 1031 } 1032 mutex_unlock(&ddebug_lock); 1033 } 1034 1035 static __initdata int ddebug_init_success; 1036 1037 static int __init dynamic_debug_init_control(void) 1038 { 1039 struct proc_dir_entry *procfs_dir; 1040 struct dentry *debugfs_dir; 1041 1042 if (!ddebug_init_success) 1043 return -ENODEV; 1044 1045 /* Create the control file in debugfs if it is enabled */ 1046 if (debugfs_initialized()) { 1047 debugfs_dir = debugfs_create_dir("dynamic_debug", NULL); 1048 debugfs_create_file("control", 0644, debugfs_dir, NULL, 1049 &ddebug_proc_fops); 1050 } 1051 1052 /* Also create the control file in procfs */ 1053 procfs_dir = proc_mkdir("dynamic_debug", NULL); 1054 if (procfs_dir) 1055 proc_create("control", 0644, procfs_dir, &proc_fops); 1056 1057 return 0; 1058 } 1059 1060 static int __init dynamic_debug_init(void) 1061 { 1062 struct _ddebug *iter, *iter_start; 1063 const char *modname = NULL; 1064 char *cmdline; 1065 int ret = 0; 1066 int n = 0, entries = 0, modct = 0; 1067 1068 if (&__start___dyndbg == &__stop___dyndbg) { 1069 if (IS_ENABLED(CONFIG_DYNAMIC_DEBUG)) { 1070 pr_warn("_ddebug table is empty in a CONFIG_DYNAMIC_DEBUG build\n"); 1071 return 1; 1072 } 1073 pr_info("Ignore empty _ddebug table in a CONFIG_DYNAMIC_DEBUG_CORE build\n"); 1074 ddebug_init_success = 1; 1075 return 0; 1076 } 1077 iter = __start___dyndbg; 1078 modname = iter->modname; 1079 iter_start = iter; 1080 for (; iter < __stop___dyndbg; iter++) { 1081 entries++; 1082 if (strcmp(modname, iter->modname)) { 1083 modct++; 1084 ret = ddebug_add_module(iter_start, n, modname); 1085 if (ret) 1086 goto out_err; 1087 n = 0; 1088 modname = iter->modname; 1089 iter_start = iter; 1090 } 1091 n++; 1092 } 1093 ret = ddebug_add_module(iter_start, n, modname); 1094 if (ret) 1095 goto out_err; 1096 1097 ddebug_init_success = 1; 1098 vpr_info("%d prdebugs in %d modules, %d KiB in ddebug tables, %d kiB in __dyndbg section\n", 1099 entries, modct, (int)((modct * sizeof(struct ddebug_table)) >> 10), 1100 (int)((entries * sizeof(struct _ddebug)) >> 10)); 1101 1102 /* now that ddebug tables are loaded, process all boot args 1103 * again to find and activate queries given in dyndbg params. 1104 * While this has already been done for known boot params, it 1105 * ignored the unknown ones (dyndbg in particular). Reusing 1106 * parse_args avoids ad-hoc parsing. This will also attempt 1107 * to activate queries for not-yet-loaded modules, which is 1108 * slightly noisy if verbose, but harmless. 1109 */ 1110 cmdline = kstrdup(saved_command_line, GFP_KERNEL); 1111 parse_args("dyndbg params", cmdline, NULL, 1112 0, 0, 0, NULL, &ddebug_dyndbg_boot_param_cb); 1113 kfree(cmdline); 1114 return 0; 1115 1116 out_err: 1117 ddebug_remove_all_tables(); 1118 return 0; 1119 } 1120 /* Allow early initialization for boot messages via boot param */ 1121 early_initcall(dynamic_debug_init); 1122 1123 /* Debugfs setup must be done later */ 1124 fs_initcall(dynamic_debug_init_control); 1125