diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-01 15:10:44 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-01 15:10:44 -0400 |
commit | 06d2fe153b9b35e57221e35831a26918f462db68 (patch) | |
tree | f77cb72dfba7f2a47ceb93e120abd9399a24a1b9 /lib | |
parent | 3aebd34b1200a902a8662da8845824a02f00772e (diff) | |
parent | e0f21e6d52cc245e7d4f7e02ca4b7b6571660ec2 (diff) |
Merge tag 'driver-core-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core
Pull driver core merge from Greg Kroah-Hartman:
"Here is the big driver core update for 3.7-rc1.
A number of firmware_class.c updates (as you saw a month or so ago),
and some hyper-v updates and some printk fixes as well. All patches
that are outside of the drivers/base area have been acked by the
respective maintainers, and have all been in the linux-next tree for a
while.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>"
* tag 'driver-core-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (95 commits)
memory: tegra{20,30}-mc: Fix reading incorrect register in mc_readl()
device.h: Add missing inline to #ifndef CONFIG_PRINTK dev_vprintk_emit
memory: emif: Add ifdef CONFIG_DEBUG_FS guard for emif_debugfs_[init|exit]
Documentation: Fixes some translation error in Documentation/zh_CN/gpio.txt
Documentation: Remove 3 byte redundant code at the head of the Documentation/zh_CN/arm/booting
Documentation: Chinese translation of Documentation/video4linux/omap3isp.txt
device and dynamic_debug: Use dev_vprintk_emit and dev_printk_emit
dev: Add dev_vprintk_emit and dev_printk_emit
netdev_printk/netif_printk: Remove a superfluous logging colon
netdev_printk/dynamic_netdev_dbg: Directly call printk_emit
dev_dbg/dynamic_debug: Update to use printk_emit, optimize stack
driver-core: Shut up dev_dbg_reatelimited() without DEBUG
tools/hv: Parse /etc/os-release
tools/hv: Check for read/write errors
tools/hv: Fix exit() error code
tools/hv: Fix file handle leak
Tools: hv: Implement the KVP verb - KVP_OP_GET_IP_INFO
Tools: hv: Rename the function kvp_get_ip_address()
Tools: hv: Implement the KVP verb - KVP_OP_SET_IP_INFO
Tools: hv: Add an example script to configure an interface
...
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; |