|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86/MCE: allow overriding the CMCI threshold
commit b350fec7d3c85e4daa0ca057810e0faec2aef523
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Mon Jan 12 15:41:39 2015 +0100
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Mon Jan 12 15:41:39 2015 +0100
x86/MCE: allow overriding the CMCI threshold
We've had reports of systems where CMCIs would surface at a relatively
high rate during certain periods of time, without them apparently
causing subsequent more severe problems (see Xeon E7-8800/4800/2800
specification clarification SC1). Give the admin a knob to lower the
impact on the system logs.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Acked-by: Christoph Egger <chegger@xxxxxxxxx>
Acked-by: Liu Jinsong <jinsong.liu@xxxxxxxxxxxxxxx>
---
docs/misc/xen-command-line.markdown | 8 ++++++++
xen/arch/x86/cpu/mcheck/mce_intel.c | 22 +++++++++++++++++++---
xen/arch/x86/cpu/mcheck/x86_mca.h | 2 --
3 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/docs/misc/xen-command-line.markdown
b/docs/misc/xen-command-line.markdown
index 152ae03..8bd75cd 100644
--- a/docs/misc/xen-command-line.markdown
+++ b/docs/misc/xen-command-line.markdown
@@ -242,6 +242,14 @@ the NMI watchdog is also enabled.
If set, override Xen's default choice for the platform timer.
+### cmci-threshold
+> `= <integer>`
+
+> Default: `2`
+
+Specify the event count threshold for raising Corrected Machine Check
+Interrupts. Specifying zero disables CMCI handling.
+
### cmos-rtc-probe
> `= <boolean>`
diff --git a/xen/arch/x86/cpu/mcheck/mce_intel.c
b/xen/arch/x86/cpu/mcheck/mce_intel.c
index 94db396..193366b 100644
--- a/xen/arch/x86/cpu/mcheck/mce_intel.c
+++ b/xen/arch/x86/cpu/mcheck/mce_intel.c
@@ -492,6 +492,9 @@ static int do_cmci_discover(int i)
{
unsigned msr = MSR_IA32_MCx_CTL2(i);
u64 val;
+ unsigned int threshold, max_threshold;
+ static unsigned int cmci_threshold = 2;
+ integer_param("cmci-threshold", cmci_threshold);
rdmsrl(msr, val);
/* Some other CPU already owns this bank. */
@@ -500,15 +503,28 @@ static int do_cmci_discover(int i)
goto out;
}
- val &= ~CMCI_THRESHOLD_MASK;
- wrmsrl(msr, val | CMCI_EN | CMCI_THRESHOLD);
- rdmsrl(msr, val);
+ if ( cmci_threshold )
+ {
+ wrmsrl(msr, val | CMCI_EN | CMCI_THRESHOLD_MASK);
+ rdmsrl(msr, val);
+ }
if (!(val & CMCI_EN)) {
/* This bank does not support CMCI. Polling timer has to handle it. */
mcabanks_set(i, __get_cpu_var(no_cmci_banks));
+ wrmsrl(msr, val & ~CMCI_THRESHOLD_MASK);
return 0;
}
+ max_threshold = MASK_EXTR(val, CMCI_THRESHOLD_MASK);
+ threshold = cmci_threshold;
+ if ( threshold > max_threshold )
+ {
+ mce_printk(MCE_QUIET,
+ "CMCI: threshold %#x too large for CPU%u bank %u, using
%#x\n",
+ threshold, smp_processor_id(), i, max_threshold);
+ threshold = max_threshold;
+ }
+ wrmsrl(msr, (val & ~CMCI_THRESHOLD_MASK) | CMCI_EN | threshold);
mcabanks_set(i, __get_cpu_var(mce_banks_owned));
out:
mcabanks_clear(i, __get_cpu_var(no_cmci_banks));
diff --git a/xen/arch/x86/cpu/mcheck/x86_mca.h
b/xen/arch/x86/cpu/mcheck/x86_mca.h
index a2cd37e..93c586d 100644
--- a/xen/arch/x86/cpu/mcheck/x86_mca.h
+++ b/xen/arch/x86/cpu/mcheck/x86_mca.h
@@ -87,8 +87,6 @@
#define K8_HWCR_MCi_STATUS_WREN (1ULL << 18)
/*Intel Specific bitfield*/
-#define CMCI_THRESHOLD 0x2
-
#define MCi_MISC_ADDRMOD_MASK (0x7UL << 6)
#define MCi_MISC_PHYSMOD (0x2UL << 6)
--
generated by git-patchbot for /home/xen/git/xen.git#master
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |