mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-11 03:52:39 -04:00
x86/mce: Change default MCE logger to check mce->kflags
Instead of keeping count of how many handlers are registered on the MCE notifier chain and printing if below some magic value, look at mce->kflags to see if anyone claims to have handled/logged this error. [ bp: Do not print ->kflags in __print_mce(). ] Signed-off-by: Tony Luck <tony.luck@intel.com> Signed-off-by: Borislav Petkov <bp@suse.de> Tested-by: Tony Luck <tony.luck@intel.com> Link: https://lkml.kernel.org/r/20200214222720.13168-6-tony.luck@intel.com
This commit is contained in:
committed by
Borislav Petkov
parent
23ba710a08
commit
925946cfa7
@@ -158,29 +158,17 @@ void mce_log(struct mce *m)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mce_log);
|
||||
|
||||
/*
|
||||
* We run the default notifier if we have only the UC, the first and the
|
||||
* default notifier registered. I.e., the mandatory NUM_DEFAULT_NOTIFIERS
|
||||
* notifiers registered on the chain.
|
||||
*/
|
||||
#define NUM_DEFAULT_NOTIFIERS 3
|
||||
static atomic_t num_notifiers;
|
||||
|
||||
void mce_register_decode_chain(struct notifier_block *nb)
|
||||
{
|
||||
if (WARN_ON(nb->priority > MCE_PRIO_MCELOG && nb->priority < MCE_PRIO_EDAC))
|
||||
return;
|
||||
|
||||
atomic_inc(&num_notifiers);
|
||||
|
||||
blocking_notifier_chain_register(&x86_mce_decoder_chain, nb);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mce_register_decode_chain);
|
||||
|
||||
void mce_unregister_decode_chain(struct notifier_block *nb)
|
||||
{
|
||||
atomic_dec(&num_notifiers);
|
||||
|
||||
blocking_notifier_chain_unregister(&x86_mce_decoder_chain, nb);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mce_unregister_decode_chain);
|
||||
@@ -263,6 +251,7 @@ static void __print_mce(struct mce *m)
|
||||
}
|
||||
|
||||
pr_cont("\n");
|
||||
|
||||
/*
|
||||
* Note this output is parsed by external tools and old fields
|
||||
* should not be changed.
|
||||
@@ -602,10 +591,8 @@ static int mce_default_notifier(struct notifier_block *nb, unsigned long val,
|
||||
if (!m)
|
||||
return NOTIFY_DONE;
|
||||
|
||||
if (atomic_read(&num_notifiers) > NUM_DEFAULT_NOTIFIERS)
|
||||
return NOTIFY_DONE;
|
||||
|
||||
__print_mce(m);
|
||||
if (!m->kflags)
|
||||
__print_mce(m);
|
||||
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user