Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Feb 2012 09:09:33 -0500
From:      John Baldwin <jhb@freebsd.org>
To:        TAKAHASHI Yoshihiro <nyan@freebsd.org>
Cc:        current@freebsd.org
Subject:   Re: MCA UNCOR error
Message-ID:  <201202140909.33894.jhb@freebsd.org>
In-Reply-To: <20120214.215750.343708041257791038.nyan@FreeBSD.org>
References:  <20120212.185549.343708041257811633.nyan@FreeBSD.org> <201202131308.48171.jhb@freebsd.org> <20120214.215750.343708041257791038.nyan@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday, February 14, 2012 7:57:50 am TAKAHASHI Yoshihiro wrote:
> In article <201202131308.48171.jhb@freebsd.org>
> John Baldwin <jhb@freebsd.org> writes:
> 
> > On Sunday, February 12, 2012 4:55:49 am TAKAHASHI Yoshihiro wrote:
> >> I get the following error and kernel panic on my pc98 at the boot time.
> >> 
> >> MCA: Bank 2, Status 0xb600000000140000
> >> MCA: Global Cap 0x0000000000000005, Status 0x0000000000000004
> >> MCA: Vendor "GenuineIntel", ID 0x616, APIC ID 0
> >> MCA: CPU 0 UNCOR PCC no error
> >> MCA: Address 0x3446ff003446ff
> >> 
> >> When I disable MCA with hw.mca.enabled=0 on loader prompt, the machine
> >> works fine.  Does it mean my pc98 is broken?  Or other isssue?
> >> 
> >> It's spec is:
> >> 
> >> FreeBSD 10.0-CURRENT #5: Thu Feb  9 13:18:22 UTC 2012
> >> CPU: Pentium Pro (198.95-MHz 686-class CPU)
> >>   Origin = "GenuineIntel"  Id = 0x616  Family = 6  Model = 1  Stepping = 6
> >>   Features=0xf9ff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,SEP,MTRR,PGE,MCA,CMOV>
> >> real memory  = 134217728 (128 MB)
> >> avail memory = 120471552 (114 MB)
> > 
> > Interesting, that is odd to get an error with no error code.
> > 
> > Can you tell from the stack trace if your CPU actually raised a machine check 
> > exception (trap 28)?
> 
> I tested with debugger enabled kernel.
> Please get from:
> http://home.jp.freebsd.org/~nyan/mca-error1.jpg
> http://home.jp.freebsd.org/~nyan/mca-error2.jpg
> (Sorry for jpeg images)

Humm.  Try this:

Index: x86/x86/mca.c
===================================================================
--- mca.c	(revision 231678)
+++ mca.c	(working copy)
@@ -548,7 +548,12 @@ mca_scan(enum scan_mode mode)
 		valid = mca_check_status(i, &rec);
 		if (valid) {
 			count++;
-			if (rec.mr_status & ucmask) {
+			/*
+			 * Don't treat records that do not specify an
+			 * error as unrecoverable.
+			 */
+			if ((rec.mr_status & MC_STATUS_MCA_ERROR) != 0 &&
+			    rec.mr_status & ucmask) {
 				recoverable = 0;
 				mca_log(&rec);
 			}

-- 
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201202140909.33894.jhb>