]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
x86/mce: Change default MCE logger to check mce->kflags
authorTony Luck <tony.luck@intel.com>
Fri, 14 Feb 2020 22:27:18 +0000 (14:27 -0800)
committerBorislav Petkov <bp@suse.de>
Tue, 14 Apr 2020 13:59:57 +0000 (15:59 +0200)
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
arch/x86/kernel/cpu/mce/core.c

index 5666a48a4bc9a07bb47a2d9df0828669ed13f17d..fc879b6669d5fbece4531681a8411060087c1465 100644 (file)
@@ -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;
 }