Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 5692
b: refs/heads/master
c: d5172f2
h: refs/heads/master
v: v3
  • Loading branch information
Andi Kleen authored and Linus Torvalds committed Aug 7, 2005
1 parent 6c76177 commit 197d35e
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: cf7bee5a0bf270a4eace0be39329d6ac0136cc47
refs/heads/master: d5172f263f76ca6d588f533c0989b22521fcbac2
5 changes: 5 additions & 0 deletions trunk/Documentation/x86_64/boot-options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ only the AMD64 specific ones are listed here.
Machine check

mce=off disable machine check
mce=bootlog Enable logging of machine checks left over from booting.
Disabled by default because some BIOS leave bogus ones.
If your BIOS doesn't do that it's a good idea to enable though
to make sure you log even machine check events that result
in a reboot.

nomce (for compatibility with i386): same as mce=off

Expand Down
16 changes: 12 additions & 4 deletions trunk/arch/x86_64/kernel/mce.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ static unsigned long bank[NR_BANKS] = { [0 ... NR_BANKS-1] = ~0UL };
static unsigned long console_logged;
static int notify_user;
static int rip_msr;
static int mce_bootlog;

/*
* Lockless MCE logging infrastructure.
Expand Down Expand Up @@ -197,10 +198,11 @@ void do_machine_check(struct pt_regs * regs, long error_code)
rdmsrl(MSR_IA32_MC0_ADDR + i*4, m.addr);

mce_get_rip(&m, regs);
if (error_code != -1)
if (error_code >= 0)
rdtscll(m.tsc);
wrmsrl(MSR_IA32_MC0_STATUS + i*4, 0);
mce_log(&m);
if (error_code != -2)
mce_log(&m);

/* Did this bank cause the exception? */
/* Assume that the bank with uncorrectable errors did it,
Expand Down Expand Up @@ -315,7 +317,7 @@ static void mce_init(void *dummy)

/* Log the machine checks left over from the previous reset.
This also clears all registers */
do_machine_check(NULL, -1);
do_machine_check(NULL, mce_bootlog ? -1 : -2);

set_in_cr4(X86_CR4_MCE);

Expand Down Expand Up @@ -476,11 +478,17 @@ static int __init mcheck_disable(char *str)
}

/* mce=off disables machine check. Note you can reenable it later
using sysfs */
using sysfs.
mce=bootlog Log MCEs from before booting. Disabled by default to work
around buggy BIOS that leave bogus MCEs. */
static int __init mcheck_enable(char *str)
{
if (*str == '=')
str++;
if (!strcmp(str, "off"))
mce_dont_init = 1;
else if (!strcmp(str, "bootlog"))
mce_bootlog = 1;
else
printk("mce= argument %s ignored. Please use /sys", str);
return 0;
Expand Down

0 comments on commit 197d35e

Please sign in to comment.