* [PATCH 0/2] Fix machine check recovery for instruction fault on Sandy Bridge @ 2012-07-19 18:38 Tony Luck 2012-07-19 18:21 ` [PATCH 1/2] x86/mce: Move MCACOD defines from mce-severity.c to <asm/mce.h> Tony Luck 2012-07-19 18:28 ` [PATCH 2/2] x86/mce: Add quirk for instruction recovery on Sandy Bridge processors Tony Luck 0 siblings, 2 replies; 8+ messages in thread From: Tony Luck @ 2012-07-19 18:38 UTC (permalink / raw) To: linux-kernel Cc: Ingo Molnar, Borislav Petkov, Chen Gong, Huang, Ying, Hidetoshi Seto This patch series adds a workaround for some strange asymmetry between how machine checks are reported for data and instruction fetches. For instruction fetch error the processor does not set the EIPV bit in the MCG_STATUS register on the affected processor, leading us to believe that the cs/ip values saved on the stack are not associated with the machine check ... which in turn makes us unable to determine whether the machine check was taken in kernel or user mode. The workaround is to fake the presence of the EIPV bit for this error on this processor model. Not pretty, but avoids having to make special cases later in the code. Tony Luck (2): x86/mce: Move MCACOD defines from mce-severity.c to <asm/mce.h> x86/mce: Add quirk for instruction recovery on Sandy Bridge processors arch/x86/include/asm/mce.h | 8 ++++++ arch/x86/kernel/cpu/mcheck/mce-severity.c | 7 ----- arch/x86/kernel/cpu/mcheck/mce.c | 43 ++++++++++++++++++++++++++++--- 3 files changed, 48 insertions(+), 10 deletions(-) -- 1.7.10.2.552.gaa3bb87 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/2] x86/mce: Move MCACOD defines from mce-severity.c to <asm/mce.h> 2012-07-19 18:38 [PATCH 0/2] Fix machine check recovery for instruction fault on Sandy Bridge Tony Luck @ 2012-07-19 18:21 ` Tony Luck 2012-07-19 18:28 ` [PATCH 2/2] x86/mce: Add quirk for instruction recovery on Sandy Bridge processors Tony Luck 1 sibling, 0 replies; 8+ messages in thread From: Tony Luck @ 2012-07-19 18:21 UTC (permalink / raw) To: linux-kernel Cc: Ingo Molnar, Borislav Petkov, Chen Gong, Huang, Ying, Hidetoshi Seto We will need some of these values in mce.c. Move them to the appropriate header file so they are available. Signed-off-by: Tony Luck <tony.luck@intel.com> --- arch/x86/include/asm/mce.h | 8 ++++++++ arch/x86/kernel/cpu/mcheck/mce-severity.c | 7 ------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/arch/x86/include/asm/mce.h b/arch/x86/include/asm/mce.h index 441520e..a3ac52b 100644 --- a/arch/x86/include/asm/mce.h +++ b/arch/x86/include/asm/mce.h @@ -33,6 +33,14 @@ #define MCI_STATUS_PCC (1ULL<<57) /* processor context corrupt */ #define MCI_STATUS_S (1ULL<<56) /* Signaled machine check */ #define MCI_STATUS_AR (1ULL<<55) /* Action required */ +#define MCACOD 0xffff /* MCA Error Code */ + +/* Architecturally defined codes from SDM Vol. 3B Chapter 15 */ +#define MCACOD_SCRUB 0x00C0 /* 0xC0-0xCF Memory Scrubbing */ +#define MCACOD_SCRUBMSK 0xfff0 +#define MCACOD_L3WB 0x017A /* L3 Explicit Writeback */ +#define MCACOD_DATA 0x0134 /* Data Load */ +#define MCACOD_INSTR 0x0150 /* Instruction Fetch */ /* MCi_MISC register defines */ #define MCI_MISC_ADDR_LSB(m) ((m) & 0x3f) diff --git a/arch/x86/kernel/cpu/mcheck/mce-severity.c b/arch/x86/kernel/cpu/mcheck/mce-severity.c index 413c2ce..1301762 100644 --- a/arch/x86/kernel/cpu/mcheck/mce-severity.c +++ b/arch/x86/kernel/cpu/mcheck/mce-severity.c @@ -55,13 +55,6 @@ static struct severity { #define MCI_UC_S (MCI_STATUS_UC|MCI_STATUS_S) #define MCI_UC_SAR (MCI_STATUS_UC|MCI_STATUS_S|MCI_STATUS_AR) #define MCI_ADDR (MCI_STATUS_ADDRV|MCI_STATUS_MISCV) -#define MCACOD 0xffff -/* Architecturally defined codes from SDM Vol. 3B Chapter 15 */ -#define MCACOD_SCRUB 0x00C0 /* 0xC0-0xCF Memory Scrubbing */ -#define MCACOD_SCRUBMSK 0xfff0 -#define MCACOD_L3WB 0x017A /* L3 Explicit Writeback */ -#define MCACOD_DATA 0x0134 /* Data Load */ -#define MCACOD_INSTR 0x0150 /* Instruction Fetch */ MCESEV( NO, "Invalid", -- 1.7.10.2.552.gaa3bb87 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/2] x86/mce: Add quirk for instruction recovery on Sandy Bridge processors 2012-07-19 18:38 [PATCH 0/2] Fix machine check recovery for instruction fault on Sandy Bridge Tony Luck 2012-07-19 18:21 ` [PATCH 1/2] x86/mce: Move MCACOD defines from mce-severity.c to <asm/mce.h> Tony Luck @ 2012-07-19 18:28 ` Tony Luck 2012-07-20 12:18 ` Borislav Petkov 1 sibling, 1 reply; 8+ messages in thread From: Tony Luck @ 2012-07-19 18:28 UTC (permalink / raw) To: linux-kernel Cc: Ingo Molnar, Borislav Petkov, Chen Gong, Huang, Ying, Hidetoshi Seto Sandy Bridge processors follow the SDM (Vol 3B, Table 15-20) and set both the RIPV and EIPV bits in the MCG_STATUS register to zero for machine checks during instruction fetch. This is more than a little counter-intuitive and means that Linux cannot recover from these errors. Rather than insert special case code at several places in mce.c and mce-severity.c, we pretend the EIPV bit was set for just this case early in processing the machine check. Signed-off-by: Tony Luck <tony.luck@intel.com> --- arch/x86/kernel/cpu/mcheck/mce.c | 43 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index da27c5d..e65e738 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c @@ -102,6 +102,8 @@ DEFINE_PER_CPU(mce_banks_t, mce_poll_banks) = { static DEFINE_PER_CPU(struct work_struct, mce_work); +static void (*quirk_no_way_out)(int bank, struct mce *m, struct pt_regs *regs); + /* * CPU/chipset specific EDAC code can register a notifier call here to print * MCE errors in a human-readable form. @@ -649,14 +651,18 @@ EXPORT_SYMBOL_GPL(machine_check_poll); * Do a quick check if any of the events requires a panic. * This decides if we keep the events around or clear them. */ -static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp) +static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp, + struct pt_regs *regs) { int i, ret = 0; for (i = 0; i < banks; i++) { m->status = mce_rdmsrl(MSR_IA32_MCx_STATUS(i)); - if (m->status & MCI_STATUS_VAL) + if (m->status & MCI_STATUS_VAL) { __set_bit(i, validp); + if (quirk_no_way_out) + quirk_no_way_out(i, m, regs); + } if (mce_severity(m, tolerant, msg) >= MCE_PANIC_SEVERITY) ret = 1; } @@ -1039,7 +1045,7 @@ void do_machine_check(struct pt_regs *regs, long error_code) *final = m; memset(valid_banks, 0, sizeof(valid_banks)); - no_way_out = mce_no_way_out(&m, &msg, valid_banks); + no_way_out = mce_no_way_out(&m, &msg, valid_banks, regs); barrier(); @@ -1415,6 +1421,34 @@ static void __mcheck_cpu_init_generic(void) } } +/* + * During IFU recovery Sandy Bridge -EP4S processors set the RIPV and + * EIPV bits in MCG_STATUS to zero on the affected logical processor (SDM + * Vol 3B Table 15-20). But this confuses both the code that determines + * whether the machine check occurred in kernel or user mode, and also + * the severity assessment code. Pretend that EIPV was set, and take the + * ip/cs values from the pt_regs that mce_gather_info() ignored earlier. + */ +static void quirk_sandybridge_ifu(int bank, struct mce *m, struct pt_regs *regs) +{ + if (bank != 0) + return; + if ((m->mcgstatus & (MCG_STATUS_EIPV|MCG_STATUS_RIPV)) != 0) + return; + if ((m->status & (MCI_STATUS_OVER|MCI_STATUS_UC| + MCI_STATUS_EN|MCI_STATUS_MISCV|MCI_STATUS_ADDRV| + MCI_STATUS_PCC|MCI_STATUS_S|MCI_STATUS_AR| + MCACOD)) != + (MCI_STATUS_UC|MCI_STATUS_EN| + MCI_STATUS_MISCV|MCI_STATUS_ADDRV|MCI_STATUS_S| + MCI_STATUS_AR|MCACOD_INSTR)) + return; + + m->mcgstatus |= MCG_STATUS_EIPV; + m->ip = regs->ip; + m->cs = regs->cs; +} + /* Add per CPU specific workarounds here */ static int __cpuinit __mcheck_cpu_apply_quirks(struct cpuinfo_x86 *c) { @@ -1512,6 +1546,9 @@ static int __cpuinit __mcheck_cpu_apply_quirks(struct cpuinfo_x86 *c) */ if (c->x86 == 6 && c->x86_model <= 13 && mce_bootlog < 0) mce_bootlog = 0; + + if (c->x86 == 6 && c->x86_model == 45) + quirk_no_way_out = quirk_sandybridge_ifu; } if (monarch_timeout < 0) monarch_timeout = 0; -- 1.7.10.2.552.gaa3bb87 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] x86/mce: Add quirk for instruction recovery on Sandy Bridge processors 2012-07-19 18:28 ` [PATCH 2/2] x86/mce: Add quirk for instruction recovery on Sandy Bridge processors Tony Luck @ 2012-07-20 12:18 ` Borislav Petkov 2012-07-20 16:33 ` Tony Luck 0 siblings, 1 reply; 8+ messages in thread From: Borislav Petkov @ 2012-07-20 12:18 UTC (permalink / raw) To: Tony Luck Cc: linux-kernel, Ingo Molnar, Chen Gong, Huang, Ying, Hidetoshi Seto On Thu, Jul 19, 2012 at 11:28:46AM -0700, Tony Luck wrote: > Sandy Bridge processors follow the SDM (Vol 3B, Table 15-20) and set > both the RIPV and EIPV bits in the MCG_STATUS register to zero for > machine checks during instruction fetch. This is more than a little > counter-intuitive and means that Linux cannot recover from these > errors. Rather than insert special case code at several places in mce.c > and mce-severity.c, we pretend the EIPV bit was set for just this case > early in processing the machine check. > > Signed-off-by: Tony Luck <tony.luck@intel.com> Looks ok, just minor nitpick below. > --- > arch/x86/kernel/cpu/mcheck/mce.c | 43 +++++++++++++++++++++++++++++++++++++--- > 1 file changed, 40 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c > index da27c5d..e65e738 100644 > --- a/arch/x86/kernel/cpu/mcheck/mce.c > +++ b/arch/x86/kernel/cpu/mcheck/mce.c > @@ -102,6 +102,8 @@ DEFINE_PER_CPU(mce_banks_t, mce_poll_banks) = { > > static DEFINE_PER_CPU(struct work_struct, mce_work); > > +static void (*quirk_no_way_out)(int bank, struct mce *m, struct pt_regs *regs); > + > /* > * CPU/chipset specific EDAC code can register a notifier call here to print > * MCE errors in a human-readable form. > @@ -649,14 +651,18 @@ EXPORT_SYMBOL_GPL(machine_check_poll); > * Do a quick check if any of the events requires a panic. > * This decides if we keep the events around or clear them. > */ > -static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp) > +static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp, > + struct pt_regs *regs) > { > int i, ret = 0; > > for (i = 0; i < banks; i++) { > m->status = mce_rdmsrl(MSR_IA32_MCx_STATUS(i)); > - if (m->status & MCI_STATUS_VAL) > + if (m->status & MCI_STATUS_VAL) { > __set_bit(i, validp); > + if (quirk_no_way_out) > + quirk_no_way_out(i, m, regs); Maybe define a default empty quirk_no_way_out() on the remaining families/vendors so that the compiler can optimize it away and we save ourselves the if-test? -- Regards/Gruss, Boris. Advanced Micro Devices GmbH Einsteinring 24, 85609 Dornach GM: Alberto Bozzo Reg: Dornach, Landkreis Muenchen HRB Nr. 43632 WEEE Registernr: 129 19551 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] x86/mce: Add quirk for instruction recovery on Sandy Bridge processors 2012-07-20 12:18 ` Borislav Petkov @ 2012-07-20 16:33 ` Tony Luck 2012-07-21 12:45 ` Borislav Petkov 0 siblings, 1 reply; 8+ messages in thread From: Tony Luck @ 2012-07-20 16:33 UTC (permalink / raw) To: Borislav Petkov Cc: linux-kernel, Ingo Molnar, Chen Gong, Huang, Ying, Hidetoshi Seto > Maybe define a default empty quirk_no_way_out() on the remaining > families/vendors so that the compiler can optimize it away and we save > ourselves the if-test? Perhaps I misunderstood your suggestion. I don't see how the compiler will manage to optimize it all away. I just tried defining static void quirk_no_way_out_nop(int bank, struct mce *m, struct pt_regs *regs) { } and providing that as an initial value for the quirk_no_way_out function pointer. Then I deleted the "if (quirk_no_way_out)". Looking at the assembly code produced, I now just have an unconditional call: callq *0x9fe992(%rip) # ffffffff81a18668 <quirk_no_way_out> I'd think that a call through a function pointer to an empty function is more expensive that testing whether that function pointer was NULL. -Tony ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] x86/mce: Add quirk for instruction recovery on Sandy Bridge processors 2012-07-20 16:33 ` Tony Luck @ 2012-07-21 12:45 ` Borislav Petkov 2012-07-23 16:11 ` Luck, Tony 0 siblings, 1 reply; 8+ messages in thread From: Borislav Petkov @ 2012-07-21 12:45 UTC (permalink / raw) To: Tony Luck Cc: linux-kernel, Ingo Molnar, Chen Gong, Huang, Ying, Hidetoshi Seto On Fri, Jul 20, 2012 at 09:33:23AM -0700, Tony Luck wrote: > > Maybe define a default empty quirk_no_way_out() on the remaining > > families/vendors so that the compiler can optimize it away and we save > > ourselves the if-test? > > Perhaps I misunderstood your suggestion. I don't see how the compiler will > manage to optimize it all away. I just tried defining > > static void quirk_no_way_out_nop(int bank, struct mce *m, struct pt_regs *regs) > { > } > > and providing that as an initial value for the quirk_no_way_out > function pointer. > > Then I deleted the "if (quirk_no_way_out)". > > Looking at the assembly code produced, I now just have an unconditional call: > > callq *0x9fe992(%rip) # ffffffff81a18668 <quirk_no_way_out> > > > I'd think that a call through a function pointer to an empty function is > more expensive that testing whether that function pointer was NULL. Agreed. Right, so I was thinking about something along the lines of what tglx did for the CMCI poll timer: http://lkml.org/lkml/2012/7/18/79 and I've been playing with this for a bit now and am seeing the same thing as you: obviously the compiler cannot optimize away an unconditional function call to an empty function *through* a function pointer (tried gcc 4.6 and 4.7). Maybe because it is a function pointer we're calling... If you make the function pointer const like this: static void default_quirk_no_way_out(int bank, struct mce *m, struct pt_regs *regs) { } static void (* const quirk_no_way_out)(int bank, struct mce *m, struct pt_regs *regs) = default_quirk_no_way_out; The "call... " is not issued but you cannot assign to it later in __mcheck_cpu_apply_quirks(). Other things which could probably be used are alternatives or jump labels but one if-test is simply not worth the complexity. Oh well, enough games. Thanks. -- Regards/Gruss, Boris. Advanced Micro Devices GmbH Einsteinring 24, 85609 Dornach GM: Alberto Bozzo Reg: Dornach, Landkreis Muenchen HRB Nr. 43632 WEEE Registernr: 129 19551 ^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH 2/2] x86/mce: Add quirk for instruction recovery on Sandy Bridge processors 2012-07-21 12:45 ` Borislav Petkov @ 2012-07-23 16:11 ` Luck, Tony 0 siblings, 0 replies; 8+ messages in thread From: Luck, Tony @ 2012-07-23 16:11 UTC (permalink / raw) To: Borislav Petkov Cc: linux-kernel, Ingo Molnar, Chen Gong, Huang, Ying, Hidetoshi Seto > Other things which could probably be used are alternatives or jump > labels but one if-test is simply not worth the complexity. It might be if this were a super-hot path. But if you are getting so many machine checks that you can see the effect of one extra "if" ... then you are hurting in so many other ways! > Oh well, enough games. Thanks for the review. -Tony ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 0/2] Fix machine check recovery for instruction fault on Sandy Bridge @ 2012-07-23 21:21 Tony Luck 2012-07-19 18:28 ` [PATCH 2/2] x86/mce: Add quirk for instruction recovery on Sandy Bridge processors Tony Luck 0 siblings, 1 reply; 8+ messages in thread From: Tony Luck @ 2012-07-23 21:21 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, Borislav Petkov, Chen Gong, Huang, Ying, Hidetoshi Seto [Unchanged since last posted - except to add Boris' Acked-by since after further discussion his nitpick didn't warrant a change. Ready for x86/mce branch ... and if possible to move to Linus in this merge window] This patch series adds a workaround for some strange asymmetry between how machine checks are reported for data and instruction fetches. For instruction fetch error the processor does not set the EIPV bit in the MCG_STATUS register on the affected processor, leading us to believe that the cs/ip values saved on the stack are not associated with the machine check ... which in turn makes us unable to determine whether the machine check was taken in kernel or user mode. The workaround is to fake the presence of the EIPV bit for this error on this processor model. Not pretty, but avoids having to make special cases later in the code. Tony Luck (2): x86/mce: Move MCACOD defines from mce-severity.c to <asm/mce.h> x86/mce: Add quirk for instruction recovery on Sandy Bridge processors arch/x86/include/asm/mce.h | 8 ++++++ arch/x86/kernel/cpu/mcheck/mce-severity.c | 7 ----- arch/x86/kernel/cpu/mcheck/mce.c | 43 ++++++++++++++++++++++++++++--- 3 files changed, 48 insertions(+), 10 deletions(-) -- 1.7.10.2.552.gaa3bb87 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/2] x86/mce: Add quirk for instruction recovery on Sandy Bridge processors 2012-07-23 21:21 [PATCH 0/2] Fix machine check recovery for instruction fault on Sandy Bridge Tony Luck @ 2012-07-19 18:28 ` Tony Luck 0 siblings, 0 replies; 8+ messages in thread From: Tony Luck @ 2012-07-19 18:28 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, Borislav Petkov, Chen Gong, Huang, Ying, Hidetoshi Seto Sandy Bridge processors follow the SDM (Vol 3B, Table 15-20) and set both the RIPV and EIPV bits in the MCG_STATUS register to zero for machine checks during instruction fetch. This is more than a little counter-intuitive and means that Linux cannot recover from these errors. Rather than insert special case code at several places in mce.c and mce-severity.c, we pretend the EIPV bit was set for just this case early in processing the machine check. Acked-by: Borislav Petkov <bp@amd64.org> Signed-off-by: Tony Luck <tony.luck@intel.com> --- arch/x86/kernel/cpu/mcheck/mce.c | 43 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index da27c5d..e65e738 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c @@ -102,6 +102,8 @@ DEFINE_PER_CPU(mce_banks_t, mce_poll_banks) = { static DEFINE_PER_CPU(struct work_struct, mce_work); +static void (*quirk_no_way_out)(int bank, struct mce *m, struct pt_regs *regs); + /* * CPU/chipset specific EDAC code can register a notifier call here to print * MCE errors in a human-readable form. @@ -649,14 +651,18 @@ EXPORT_SYMBOL_GPL(machine_check_poll); * Do a quick check if any of the events requires a panic. * This decides if we keep the events around or clear them. */ -static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp) +static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp, + struct pt_regs *regs) { int i, ret = 0; for (i = 0; i < banks; i++) { m->status = mce_rdmsrl(MSR_IA32_MCx_STATUS(i)); - if (m->status & MCI_STATUS_VAL) + if (m->status & MCI_STATUS_VAL) { __set_bit(i, validp); + if (quirk_no_way_out) + quirk_no_way_out(i, m, regs); + } if (mce_severity(m, tolerant, msg) >= MCE_PANIC_SEVERITY) ret = 1; } @@ -1039,7 +1045,7 @@ void do_machine_check(struct pt_regs *regs, long error_code) *final = m; memset(valid_banks, 0, sizeof(valid_banks)); - no_way_out = mce_no_way_out(&m, &msg, valid_banks); + no_way_out = mce_no_way_out(&m, &msg, valid_banks, regs); barrier(); @@ -1415,6 +1421,34 @@ static void __mcheck_cpu_init_generic(void) } } +/* + * During IFU recovery Sandy Bridge -EP4S processors set the RIPV and + * EIPV bits in MCG_STATUS to zero on the affected logical processor (SDM + * Vol 3B Table 15-20). But this confuses both the code that determines + * whether the machine check occurred in kernel or user mode, and also + * the severity assessment code. Pretend that EIPV was set, and take the + * ip/cs values from the pt_regs that mce_gather_info() ignored earlier. + */ +static void quirk_sandybridge_ifu(int bank, struct mce *m, struct pt_regs *regs) +{ + if (bank != 0) + return; + if ((m->mcgstatus & (MCG_STATUS_EIPV|MCG_STATUS_RIPV)) != 0) + return; + if ((m->status & (MCI_STATUS_OVER|MCI_STATUS_UC| + MCI_STATUS_EN|MCI_STATUS_MISCV|MCI_STATUS_ADDRV| + MCI_STATUS_PCC|MCI_STATUS_S|MCI_STATUS_AR| + MCACOD)) != + (MCI_STATUS_UC|MCI_STATUS_EN| + MCI_STATUS_MISCV|MCI_STATUS_ADDRV|MCI_STATUS_S| + MCI_STATUS_AR|MCACOD_INSTR)) + return; + + m->mcgstatus |= MCG_STATUS_EIPV; + m->ip = regs->ip; + m->cs = regs->cs; +} + /* Add per CPU specific workarounds here */ static int __cpuinit __mcheck_cpu_apply_quirks(struct cpuinfo_x86 *c) { @@ -1512,6 +1546,9 @@ static int __cpuinit __mcheck_cpu_apply_quirks(struct cpuinfo_x86 *c) */ if (c->x86 == 6 && c->x86_model <= 13 && mce_bootlog < 0) mce_bootlog = 0; + + if (c->x86 == 6 && c->x86_model == 45) + quirk_no_way_out = quirk_sandybridge_ifu; } if (monarch_timeout < 0) monarch_timeout = 0; -- 1.7.10.2.552.gaa3bb87 ^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2012-07-23 21:57 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2012-07-19 18:38 [PATCH 0/2] Fix machine check recovery for instruction fault on Sandy Bridge Tony Luck 2012-07-19 18:21 ` [PATCH 1/2] x86/mce: Move MCACOD defines from mce-severity.c to <asm/mce.h> Tony Luck 2012-07-19 18:28 ` [PATCH 2/2] x86/mce: Add quirk for instruction recovery on Sandy Bridge processors Tony Luck 2012-07-20 12:18 ` Borislav Petkov 2012-07-20 16:33 ` Tony Luck 2012-07-21 12:45 ` Borislav Petkov 2012-07-23 16:11 ` Luck, Tony 2012-07-23 21:21 [PATCH 0/2] Fix machine check recovery for instruction fault on Sandy Bridge Tony Luck 2012-07-19 18:28 ` [PATCH 2/2] x86/mce: Add quirk for instruction recovery on Sandy Bridge processors Tony Luck
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).