diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/dynamic_debug.c | 56 |
1 files changed, 43 insertions, 13 deletions
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 7ca29a0a3019..e7f7d993357a 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c | |||
| @@ -521,25 +521,25 @@ static char *dynamic_emit_prefix(const struct _ddebug *desc, char *buf) | |||
| 521 | int pos_after_tid; | 521 | int pos_after_tid; |
| 522 | int pos = 0; | 522 | int pos = 0; |
| 523 | 523 | ||
| 524 | pos += snprintf(buf + pos, remaining(pos), "%s", KERN_DEBUG); | 524 | *buf = '\0'; |
| 525 | |||
| 525 | if (desc->flags & _DPRINTK_FLAGS_INCL_TID) { | 526 | if (desc->flags & _DPRINTK_FLAGS_INCL_TID) { |
| 526 | if (in_interrupt()) | 527 | if (in_interrupt()) |
| 527 | pos += snprintf(buf + pos, remaining(pos), "%s ", | 528 | pos += snprintf(buf + pos, remaining(pos), "<intr> "); |
| 528 | "<intr>"); | ||
| 529 | else | 529 | else |
| 530 | pos += snprintf(buf + pos, remaining(pos), "[%d] ", | 530 | pos += snprintf(buf + pos, remaining(pos), "[%d] ", |
| 531 | task_pid_vnr(current)); | 531 | task_pid_vnr(current)); |
| 532 | } | 532 | } |
| 533 | pos_after_tid = pos; | 533 | pos_after_tid = pos; |
| 534 | if (desc->flags & _DPRINTK_FLAGS_INCL_MODNAME) | 534 | if (desc->flags & _DPRINTK_FLAGS_INCL_MODNAME) |
| 535 | pos += snprintf(buf + pos, remaining(pos), "%s:", | 535 | pos += snprintf(buf + pos, remaining(pos), "%s:", |
| 536 | desc->modname); | 536 | desc->modname); |
| 537 | if (desc->flags & _DPRINTK_FLAGS_INCL_FUNCNAME) | 537 | if (desc->flags & _DPRINTK_FLAGS_INCL_FUNCNAME) |
| 538 | pos += snprintf(buf + pos, remaining(pos), "%s:", | 538 | pos += snprintf(buf + pos, remaining(pos), "%s:", |
| 539 | desc->function); | 539 | desc->function); |
| 540 | if (desc->flags & _DPRINTK_FLAGS_INCL_LINENO) | 540 | if (desc->flags & _DPRINTK_FLAGS_INCL_LINENO) |
| 541 | pos += snprintf(buf + pos, remaining(pos), "%d:", | 541 | pos += snprintf(buf + pos, remaining(pos), "%d:", |
| 542 | desc->lineno); | 542 | desc->lineno); |
| 543 | if (pos - pos_after_tid) | 543 | if (pos - pos_after_tid) |
| 544 | pos += snprintf(buf + pos, remaining(pos), " "); | 544 | pos += snprintf(buf + pos, remaining(pos), " "); |
| 545 | if (pos >= PREFIX_SIZE) | 545 | if (pos >= PREFIX_SIZE) |
| @@ -559,9 +559,13 @@ int __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...) | |||
| 559 | BUG_ON(!fmt); | 559 | BUG_ON(!fmt); |
| 560 | 560 | ||
| 561 | va_start(args, fmt); | 561 | va_start(args, fmt); |
| 562 | |||
| 562 | vaf.fmt = fmt; | 563 | vaf.fmt = fmt; |
| 563 | vaf.va = &args; | 564 | vaf.va = &args; |
| 564 | res = printk("%s%pV", dynamic_emit_prefix(descriptor, buf), &vaf); | 565 | |
| 566 | res = printk(KERN_DEBUG "%s%pV", | ||
| 567 | dynamic_emit_prefix(descriptor, buf), &vaf); | ||
| 568 | |||
| 565 | va_end(args); | 569 | va_end(args); |
| 566 | 570 | ||
| 567 | return res; | 571 | return res; |
| @@ -574,15 +578,26 @@ int __dynamic_dev_dbg(struct _ddebug *descriptor, | |||
| 574 | struct va_format vaf; | 578 | struct va_format vaf; |
| 575 | va_list args; | 579 | va_list args; |
| 576 | int res; | 580 | int res; |
| 577 | char buf[PREFIX_SIZE]; | ||
| 578 | 581 | ||
| 579 | BUG_ON(!descriptor); | 582 | BUG_ON(!descriptor); |
| 580 | BUG_ON(!fmt); | 583 | BUG_ON(!fmt); |
| 581 | 584 | ||
| 582 | va_start(args, fmt); | 585 | va_start(args, fmt); |
| 586 | |||
| 583 | vaf.fmt = fmt; | 587 | vaf.fmt = fmt; |
| 584 | vaf.va = &args; | 588 | vaf.va = &args; |
| 585 | res = __dev_printk(dynamic_emit_prefix(descriptor, buf), dev, &vaf); | 589 | |
| 590 | if (!dev) { | ||
| 591 | res = printk(KERN_DEBUG "(NULL device *): %pV", &vaf); | ||
| 592 | } else { | ||
| 593 | char buf[PREFIX_SIZE]; | ||
| 594 | |||
| 595 | res = dev_printk_emit(7, dev, "%s%s %s: %pV", | ||
| 596 | dynamic_emit_prefix(descriptor, buf), | ||
| 597 | dev_driver_string(dev), dev_name(dev), | ||
| 598 | &vaf); | ||
| 599 | } | ||
| 600 | |||
| 586 | va_end(args); | 601 | va_end(args); |
| 587 | 602 | ||
| 588 | return res; | 603 | return res; |
| @@ -592,20 +607,35 @@ EXPORT_SYMBOL(__dynamic_dev_dbg); | |||
| 592 | #ifdef CONFIG_NET | 607 | #ifdef CONFIG_NET |
| 593 | 608 | ||
| 594 | int __dynamic_netdev_dbg(struct _ddebug *descriptor, | 609 | int __dynamic_netdev_dbg(struct _ddebug *descriptor, |
| 595 | const struct net_device *dev, const char *fmt, ...) | 610 | const struct net_device *dev, const char *fmt, ...) |
| 596 | { | 611 | { |
| 597 | struct va_format vaf; | 612 | struct va_format vaf; |
| 598 | va_list args; | 613 | va_list args; |
| 599 | int res; | 614 | int res; |
| 600 | char buf[PREFIX_SIZE]; | ||
| 601 | 615 | ||
| 602 | BUG_ON(!descriptor); | 616 | BUG_ON(!descriptor); |
| 603 | BUG_ON(!fmt); | 617 | BUG_ON(!fmt); |
| 604 | 618 | ||
| 605 | va_start(args, fmt); | 619 | va_start(args, fmt); |
| 620 | |||
| 606 | vaf.fmt = fmt; | 621 | vaf.fmt = fmt; |
| 607 | vaf.va = &args; | 622 | vaf.va = &args; |
| 608 | res = __netdev_printk(dynamic_emit_prefix(descriptor, buf), dev, &vaf); | 623 | |
| 624 | if (dev && dev->dev.parent) { | ||
| 625 | char buf[PREFIX_SIZE]; | ||
| 626 | |||
| 627 | res = dev_printk_emit(7, dev->dev.parent, | ||
| 628 | "%s%s %s %s: %pV", | ||
| 629 | dynamic_emit_prefix(descriptor, buf), | ||
| 630 | dev_driver_string(dev->dev.parent), | ||
| 631 | dev_name(dev->dev.parent), | ||
| 632 | netdev_name(dev), &vaf); | ||
| 633 | } else if (dev) { | ||
| 634 | res = printk(KERN_DEBUG "%s: %pV", netdev_name(dev), &vaf); | ||
| 635 | } else { | ||
| 636 | res = printk(KERN_DEBUG "(NULL net_device): %pV", &vaf); | ||
| 637 | } | ||
| 638 | |||
| 609 | va_end(args); | 639 | va_end(args); |
| 610 | 640 | ||
| 611 | return res; | 641 | return res; |
