x86/mce: Handle Intel threshold interrupt storms
authorTony Luck <tony.luck@intel.com>
Wed, 15 Nov 2023 19:54:50 +0000 (11:54 -0800)
committerBorislav Petkov (AMD) <bp@alien8.de>
Fri, 15 Dec 2023 13:53:42 +0000 (14:53 +0100)
commit1f68ce2a027250aeeb1756391110cdc4dc97c797
tree534140189405bf3a60fad66ddaf27829f985979b
parent7eae17c4add5de46efcca45356388f480103e6d9
x86/mce: Handle Intel threshold interrupt storms

Add an Intel specific hook into machine_check_poll() to keep track of
per-CPU, per-bank corrected error logs (with a stub for the
CONFIG_MCE_INTEL=n case).

When a storm is observed the rate of interrupts is reduced by setting
a large threshold value for this bank in IA32_MCi_CTL2. This bank is
added to the bitmap of banks for this CPU to poll. The polling rate is
increased to once per second.

When a storm ends reset the threshold in IA32_MCi_CTL2 back to 1, remove
the bank from the bitmap for polling, and change the polling rate back
to the default.

If a CPU with banks in storm mode is taken offline, the new CPU that
inherits ownership of those banks takes over management of storm(s) in
the inherited bank(s).

The cmci_discover() function was already very large. These changes
pushed it well over the top. Refactor with three helper functions to
bring it back under control.

Signed-off-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/r/20231115195450.12963-4-tony.luck@intel.com
arch/x86/kernel/cpu/mce/intel.c
arch/x86/kernel/cpu/mce/internal.h
arch/x86/kernel/cpu/mce/threshold.c