aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-11-02 19:55:15 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-11-02 19:55:15 -0400
commit6681ba7ec480bc839584fd0817991d248b4b9e44 (patch)
tree994fb1de40d58ce8dac821cf1fec727e2f902f47 /arch/x86
parent06ef93e1b8405acac6ec900564e3ad1a8e3a72b2 (diff)
parent4d096ca7e65584dd5845e64c6400f920e694f672 (diff)
Merge branch 'linux_next' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-edac
* 'linux_next' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-edac: (21 commits) MAINTAINERS: add an entry for Edac Sandy Bridge driver edac: tag sb_edac as EXPERIMENTAL, as it requires more testing EDAC: Fix incorrect edac mode reporting in sb_edac edac: sb_edac: Add it to the building system edac: Add an experimental new driver to support Sandy Bridge CPU's i7300_edac: Fix error cleanup logic i7core_edac: Initialize memory name with cpu, channel, bank i7core_edac: Fix compilation on 32 bits arch i7core_edac: scrubbing fixups EDAC: Correct Kconfig dependencies i7core_edac: return -ENODEV if no MC is found i7core_edac: use edac's own way to print errors MAINTAINERS: remove dropped edac_mce.* from the file i7core_edac: Drop the edac_mce facility x86, MCE: Use notifier chain only for MCE decoding EDAC i7core: Use mce socketid for better compatibility i7core_edac: Don't enable memory scrubbing for Xeon 35xx i7core_edac: Add scrubbing support edac: Move edac main structs to include/linux/edac.h i7core_edac: Fix oops when trying to inject errors ...
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
index 7b5063a6ad42..864830e1dd65 100644
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@ -36,7 +36,6 @@
36#include <linux/fs.h> 36#include <linux/fs.h>
37#include <linux/mm.h> 37#include <linux/mm.h>
38#include <linux/debugfs.h> 38#include <linux/debugfs.h>
39#include <linux/edac_mce.h>
40#include <linux/irq_work.h> 39#include <linux/irq_work.h>
41 40
42#include <asm/processor.h> 41#include <asm/processor.h>
@@ -144,23 +143,20 @@ static struct mce_log mcelog = {
144void mce_log(struct mce *mce) 143void mce_log(struct mce *mce)
145{ 144{
146 unsigned next, entry; 145 unsigned next, entry;
146 int ret = 0;
147 147
148 /* Emit the trace record: */ 148 /* Emit the trace record: */
149 trace_mce_record(mce); 149 trace_mce_record(mce);
150 150
151 ret = atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, mce);
152 if (ret == NOTIFY_STOP)
153 return;
154
151 mce->finished = 0; 155 mce->finished = 0;
152 wmb(); 156 wmb();
153 for (;;) { 157 for (;;) {
154 entry = rcu_dereference_check_mce(mcelog.next); 158 entry = rcu_dereference_check_mce(mcelog.next);
155 for (;;) { 159 for (;;) {
156 /*
157 * If edac_mce is enabled, it will check the error type
158 * and will process it, if it is a known error.
159 * Otherwise, the error will be sent through mcelog
160 * interface
161 */
162 if (edac_mce_parse(mce))
163 return;
164 160
165 /* 161 /*
166 * When the buffer fills up discard new entries. 162 * When the buffer fills up discard new entries.
@@ -556,10 +552,8 @@ void machine_check_poll(enum mcp_flags flags, mce_banks_t *b)
556 * Don't get the IP here because it's unlikely to 552 * Don't get the IP here because it's unlikely to
557 * have anything to do with the actual error location. 553 * have anything to do with the actual error location.
558 */ 554 */
559 if (!(flags & MCP_DONTLOG) && !mce_dont_log_ce) { 555 if (!(flags & MCP_DONTLOG) && !mce_dont_log_ce)
560 mce_log(&m); 556 mce_log(&m);
561 atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, &m);
562 }
563 557
564 /* 558 /*
565 * Clear state for this bank. 559 * Clear state for this bank.