|
@@ -123,7 +123,7 @@ 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.
|
|
|
*/
|
|
|
-ATOMIC_NOTIFIER_HEAD(x86_mce_decoder_chain);
|
|
|
+BLOCKING_NOTIFIER_HEAD(x86_mce_decoder_chain);
|
|
|
|
|
|
/* Do initial initialization of a struct mce */
|
|
|
void mce_setup(struct mce *m)
|
|
@@ -220,7 +220,7 @@ void mce_register_decode_chain(struct notifier_block *nb)
|
|
|
|
|
|
WARN_ON(nb->priority > MCE_PRIO_LOWEST && nb->priority < MCE_PRIO_EDAC);
|
|
|
|
|
|
- atomic_notifier_chain_register(&x86_mce_decoder_chain, nb);
|
|
|
+ blocking_notifier_chain_register(&x86_mce_decoder_chain, nb);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(mce_register_decode_chain);
|
|
|
|
|
@@ -228,7 +228,7 @@ void mce_unregister_decode_chain(struct notifier_block *nb)
|
|
|
{
|
|
|
atomic_dec(&num_notifiers);
|
|
|
|
|
|
- atomic_notifier_chain_unregister(&x86_mce_decoder_chain, nb);
|
|
|
+ blocking_notifier_chain_unregister(&x86_mce_decoder_chain, nb);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(mce_unregister_decode_chain);
|
|
|
|
|
@@ -321,18 +321,7 @@ static void __print_mce(struct mce *m)
|
|
|
|
|
|
static void print_mce(struct mce *m)
|
|
|
{
|
|
|
- int ret = 0;
|
|
|
-
|
|
|
__print_mce(m);
|
|
|
-
|
|
|
- /*
|
|
|
- * Print out human-readable details about the MCE error,
|
|
|
- * (if the CPU has an implementation for that)
|
|
|
- */
|
|
|
- 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");
|
|
|
}
|
|
|
|