|
@@ -105,20 +105,6 @@ static int cpu_missing;
|
|
|
ATOMIC_NOTIFIER_HEAD(x86_mce_decoder_chain);
|
|
|
EXPORT_SYMBOL_GPL(x86_mce_decoder_chain);
|
|
|
|
|
|
-static int default_decode_mce(struct notifier_block *nb, unsigned long val,
|
|
|
- void *data)
|
|
|
-{
|
|
|
- pr_emerg(HW_ERR "No human readable MCE decoding support on this CPU type.\n");
|
|
|
- pr_emerg(HW_ERR "Run the message through 'mcelog --ascii' to decode.\n");
|
|
|
-
|
|
|
- return NOTIFY_STOP;
|
|
|
-}
|
|
|
-
|
|
|
-static struct notifier_block mce_dec_nb = {
|
|
|
- .notifier_call = default_decode_mce,
|
|
|
- .priority = -1,
|
|
|
-};
|
|
|
-
|
|
|
/* MCA banks polled by the period polling timer for corrected events */
|
|
|
DEFINE_PER_CPU(mce_banks_t, mce_poll_banks) = {
|
|
|
[0 ... BITS_TO_LONGS(MAX_NR_BANKS)-1] = ~0UL
|
|
@@ -212,6 +198,8 @@ void mce_log(struct mce *mce)
|
|
|
|
|
|
static void print_mce(struct mce *m)
|
|
|
{
|
|
|
+ int ret = 0;
|
|
|
+
|
|
|
pr_emerg(HW_ERR "CPU %d: Machine Check Exception: %Lx Bank %d: %016Lx\n",
|
|
|
m->extcpu, m->mcgstatus, m->bank, m->status);
|
|
|
|
|
@@ -239,7 +227,11 @@ static void print_mce(struct mce *m)
|
|
|
* Print out human-readable details about the MCE error,
|
|
|
* (if the CPU has an implementation for that)
|
|
|
*/
|
|
|
- atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, m);
|
|
|
+ ret = atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, m);
|
|
|
+ if (ret == NOTIFY_STOP)
|
|
|
+ return;
|
|
|
+
|
|
|
+ pr_emerg_ratelimited(HW_ERR "Run the above through 'mcelog --ascii'\n");
|
|
|
}
|
|
|
|
|
|
#define PANIC_TIMEOUT 5 /* 5 seconds */
|
|
@@ -1721,8 +1713,6 @@ __setup("mce", mcheck_enable);
|
|
|
|
|
|
int __init mcheck_init(void)
|
|
|
{
|
|
|
- atomic_notifier_chain_register(&x86_mce_decoder_chain, &mce_dec_nb);
|
|
|
-
|
|
|
mcheck_intel_therm_init();
|
|
|
|
|
|
return 0;
|