• Tejun Heo's avatar
    dump_stack: implement arch-specific hardware description in task dumps · 98e5e1bf
    Tejun Heo authored
    x86 and ia64 can acquire extra hardware identification information
    from DMI and print it along with task dumps; however, the usage isn't
    consistent.
    
    * x86 show_regs() collects vendor, product and board strings and print
      them out with PID, comm and utsname.  Some of the information is
      printed again later in the same dump.
    
    * warn_slowpath_common() explicitly accesses the DMI board and prints
      it out with "Hardware name:" label.  This applies to both x86 and
      ia64 but is irrelevant on all other archs.
    
    * ia64 doesn't show DMI information on other non-WARN dumps.
    
    This patch introduces arch-specific hardware description used by
    dump_stack().  It can be set by calling dump_stack_set_arch_desc()
    during boot and, if exists, printed out in a separate line with
    "Hardware name:" label.
    
    dmi_set_dump_stack_arch_desc() is added which sets arch-specific
    description from DMI data.  It uses dmi_ids_string[] which is set from
    dmi_present() used for DMI debug message.  It is superset of the
    information x86 show_regs() is using.  The function is called from x86
    and ia64 boot code right after dmi_scan_machine().
    
    This makes the explicit DMI handling in warn_slowpath_common()
    unnecessary.  Removed.
    
    show_regs() isn't yet converted to use generic debug information
    printing and this patch doesn't remove the duplicate DMI handling in
    x86 show_regs().  The next patch will unify show_regs() handling and
    remove the duplication.
    
    An example WARN dump follows.
    
     WARNING: at kernel/workqueue.c:4841 init_workqueues+0x35/0x505()
     Modules linked in:
     CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.9.0-rc1-work+ #3
     Hardware name: empty empty/S3992, BIOS 080011  10/26/2007
      0000000000000009 ffff88007c861e08 ffffffff81c614dc ffff88007c861e48
      ffffffff8108f500 ffffffff82228240 0000000000000040 ffffffff8234a08e
      0000000000000000 0000000000000000 0000000000000000 ffff88007c861e58
     Call Trace:
      [<ffffffff81c614dc>] dump_stack+0x19/0x1b
      [<ffffffff8108f500>] warn_slowpath_common+0x70/0xa0
      [<ffffffff8108f54a>] warn_slowpath_null+0x1a/0x20
      [<ffffffff8234a0c3>] init_workqueues+0x35/0x505
      ...
    
    v2: Use the same string as the debug message from dmi_present() which
        also contains BIOS information.  Move hardware name into its own
        line as warn_slowpath_common() did.  This change was suggested by
        Bjorn Helgaas.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Bjorn Helgaas <bhelgaas@google.com>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Fengguang Wu <fengguang.wu@intel.com>
    Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
    Cc: Jesper Nilsson <jesper.nilsson@axis.com>
    Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Cc: Mike Frysinger <vapier@gentoo.org>
    Cc: Vineet Gupta <vgupta@synopsys.com>
    Cc: Sam Ravnborg <sam@ravnborg.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    98e5e1bf
printk.h 10.6 KB