x86, dmi, debug: Log board name (when present) in dmesg/oops output

The "Type 2" SMBIOS record that contains Board Name is not
strictly required and may be absent in the SMBIOS on some
platforms.

( Please note that Type 2 is not listed in Table 3 in Sec 6.2
  ("Required Structures and Data") of the SMBIOS v2.7
  Specification. )

Use the Manufacturer Name (aka System Vendor) name.
Print Board Name only when it is present.

Before the fix:
  (i) dmesg output: DMI: /ProLiant DL380 G6, BIOS P62 01/29/2011
 (ii) oops output:  Pid: 2170, comm: bash Not tainted 2.6.38-rc4+ #3 /ProLiant DL380 G6

After the fix:
  (i) dmesg output: DMI: HP ProLiant DL380 G6, BIOS P62 01/29/2011
 (ii) oops output:  Pid: 2278, comm: bash Not tainted 2.6.38-rc4+ #4 HP ProLiant DL380 G6

Signed-off-by: Naga Chumbalkar <nagananda.chumbalkar@hp.com>
Reviewed-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Cc: <stable@kernel.org> # .3x - good for debugging, please apply as far back as it applies cleanly
LKML-Reference: <20110214224423.2182.13929.sendpatchset@nchumbalkar.americas.hpqcorp.net>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Naga Chumbalkar 2011-02-14 22:47:17 +00:00 committed by Ingo Molnar
parent 678301ecad
commit 84e383b322
2 changed files with 25 additions and 8 deletions

View File

@ -92,21 +92,31 @@ void show_regs(struct pt_regs *regs)
void show_regs_common(void) void show_regs_common(void)
{ {
const char *board, *product; const char *vendor, *product, *board;
board = dmi_get_system_info(DMI_BOARD_NAME); vendor = dmi_get_system_info(DMI_SYS_VENDOR);
if (!board) if (!vendor)
board = ""; vendor = "";
product = dmi_get_system_info(DMI_PRODUCT_NAME); product = dmi_get_system_info(DMI_PRODUCT_NAME);
if (!product) if (!product)
product = ""; product = "";
/* Board Name is optional */
board = dmi_get_system_info(DMI_BOARD_NAME);
printk(KERN_CONT "\n"); printk(KERN_CONT "\n");
printk(KERN_DEFAULT "Pid: %d, comm: %.20s %s %s %.*s %s/%s\n", printk(KERN_DEFAULT "Pid: %d, comm: %.20s %s %s %.*s",
current->pid, current->comm, print_tainted(), current->pid, current->comm, print_tainted(),
init_utsname()->release, init_utsname()->release,
(int)strcspn(init_utsname()->version, " "), (int)strcspn(init_utsname()->version, " "),
init_utsname()->version, board, product); init_utsname()->version);
printk(KERN_CONT " ");
printk(KERN_CONT "%s %s", vendor, product);
if (board) {
printk(KERN_CONT "/");
printk(KERN_CONT "%s", board);
}
printk(KERN_CONT "\n");
} }
void flush_thread(void) void flush_thread(void)

View File

@ -378,10 +378,17 @@ static void __init print_filtered(const char *info)
static void __init dmi_dump_ids(void) static void __init dmi_dump_ids(void)
{ {
const char *board; /* Board Name is optional */
printk(KERN_DEBUG "DMI: "); printk(KERN_DEBUG "DMI: ");
print_filtered(dmi_get_system_info(DMI_BOARD_NAME)); print_filtered(dmi_get_system_info(DMI_SYS_VENDOR));
printk(KERN_CONT "/"); printk(KERN_CONT " ");
print_filtered(dmi_get_system_info(DMI_PRODUCT_NAME)); print_filtered(dmi_get_system_info(DMI_PRODUCT_NAME));
board = dmi_get_system_info(DMI_BOARD_NAME);
if (board) {
printk(KERN_CONT "/");
print_filtered(board);
}
printk(KERN_CONT ", BIOS "); printk(KERN_CONT ", BIOS ");
print_filtered(dmi_get_system_info(DMI_BIOS_VERSION)); print_filtered(dmi_get_system_info(DMI_BIOS_VERSION));
printk(KERN_CONT " "); printk(KERN_CONT " ");