diff options
author | Borislav Petkov <bp@suse.de> | 2015-08-12 18:29:38 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2015-08-13 10:12:52 +0200 |
commit | eef4dfa0cb83899c782935ac5345532f47073cea (patch) | |
tree | 4388c50d3a5ac5495fe0642960b209e631ba20c0 /arch/x86/kernel/cpu | |
parent | f29a7aff4bd60ebc3da4982f80144a4158c4c74a (diff) | |
download | blackbird-op-linux-eef4dfa0cb83899c782935ac5345532f47073cea.tar.gz blackbird-op-linux-eef4dfa0cb83899c782935ac5345532f47073cea.zip |
x86/mce: Kill drain_mcelog_buffer()
This used to flush out MCEs logged during early boot and which
were in the MCA registers from a previous system run. No need
for that now, since we've moved to a genpool.
Suggested-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1439396985-12812-7-git-send-email-bp@alien8.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86/kernel/cpu')
-rw-r--r-- | arch/x86/kernel/cpu/mcheck/mce.c | 44 |
1 files changed, 2 insertions, 42 deletions
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index 9568bb55bfe2..32b586ee006a 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c @@ -199,55 +199,15 @@ void mce_log(struct mce *mce) set_bit(0, &mce_need_notify); } -static void drain_mcelog_buffer(void) -{ - unsigned int next, i, prev = 0; - - next = ACCESS_ONCE(mcelog.next); - - do { - struct mce *m; - - /* drain what was logged during boot */ - for (i = prev; i < next; i++) { - unsigned long start = jiffies; - unsigned retries = 1; - - m = &mcelog.entry[i]; - - while (!m->finished) { - if (time_after_eq(jiffies, start + 2*retries)) - retries++; - - cpu_relax(); - - if (!m->finished && retries >= 4) { - pr_err("skipping error being logged currently!\n"); - break; - } - } - smp_rmb(); - atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, m); - } - - memset(mcelog.entry + prev, 0, (next - prev) * sizeof(*m)); - prev = next; - next = cmpxchg(&mcelog.next, prev, 0); - } while (next != prev); -} - static struct notifier_block mce_srao_nb; -void mce_register_decode_chain(struct notifier_block *nb, bool drain) +void mce_register_decode_chain(struct notifier_block *nb) { /* Ensure SRAO notifier has the highest priority in the decode chain. */ if (nb != &mce_srao_nb && nb->priority == INT_MAX) nb->priority -= 1; atomic_notifier_chain_register(&x86_mce_decoder_chain, nb); - - if (drain) - drain_mcelog_buffer(); } EXPORT_SYMBOL_GPL(mce_register_decode_chain); @@ -2028,7 +1988,7 @@ __setup("mce", mcheck_enable); int __init mcheck_init(void) { mcheck_intel_therm_init(); - mce_register_decode_chain(&mce_srao_nb, false); + mce_register_decode_chain(&mce_srao_nb); mcheck_vendor_init_severity(); INIT_WORK(&mce_work, mce_process_work); |