Commit 84e383b3 authored by Naga Chumbalkar's avatar Naga Chumbalkar Committed by Ingo Molnar
Browse files

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: default avatarNaga Chumbalkar <nagananda.chumbalkar@hp.com>
Reviewed-by: default avatarBjorn 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: default avatarIngo Molnar <mingo@elte.hu>
parent 678301ec
Loading
Loading
Loading
Loading
+16 −6
Original line number Diff line number Diff line
@@ -92,21 +92,31 @@ void show_regs(struct pt_regs *regs)

void show_regs_common(void)
{
	const char *board, *product;
	const char *vendor, *product, *board;

	board = dmi_get_system_info(DMI_BOARD_NAME);
	if (!board)
		board = "";
	vendor = dmi_get_system_info(DMI_SYS_VENDOR);
	if (!vendor)
		vendor = "";
	product = dmi_get_system_info(DMI_PRODUCT_NAME);
	if (!product)
		product = "";

	/* Board Name is optional */
	board = dmi_get_system_info(DMI_BOARD_NAME);

	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(),
		init_utsname()->release,
		(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)
+9 −2
Original line number Diff line number Diff line
@@ -378,10 +378,17 @@ static void __init print_filtered(const char *info)

static void __init dmi_dump_ids(void)
{
	const char *board;	/* Board Name is optional */

	printk(KERN_DEBUG "DMI: ");
	print_filtered(dmi_get_system_info(DMI_BOARD_NAME));
	printk(KERN_CONT "/");
	print_filtered(dmi_get_system_info(DMI_SYS_VENDOR));
	printk(KERN_CONT " ");
	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 ");
	print_filtered(dmi_get_system_info(DMI_BIOS_VERSION));
	printk(KERN_CONT " ");