x86/mce: Prevent duplicate error records
authorBorislav Petkov (AMD) <bp@alien8.de>
Wed, 19 Jul 2023 12:19:50 +0000 (14:19 +0200)
committerBorislav Petkov (AMD) <bp@alien8.de>
Fri, 21 Jul 2023 16:55:46 +0000 (18:55 +0200)
commitc3629dd7e67d6ec5705d33b0de0d142c972fe573
tree2e344dd47063840314a002e9ddb08d5cd316e283
parentfdf0eaf11452d72945af31804e2a1048ee1b574c
x86/mce: Prevent duplicate error records

A legitimate use case of the MCA infrastructure is to have the firmware
log all uncorrectable errors and also, have the OS see all correctable
errors.

The uncorrectable, UCNA errors are usually configured to be reported
through an SMI. CMCI, which is the correctable error reporting
interrupt, uses SMI too and having both enabled, leads to unnecessary
overhead.

So what ends up happening is, people disable CMCI in the wild and leave
on only the UCNA SMI.

When CMCI is disabled, the MCA infrastructure resorts to polling the MCA
banks. If a MCA MSR is shared between the logical threads, one error
ends up getting logged multiple times as the polling runs on every
logical thread.

Therefore, introduce locking on the Intel side of the polling routine to
prevent such duplicate error records from appearing.

Based on a patch by Aristeu Rozanski <aris@ruivo.org>.

Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Tested-by: Tony Luck <tony.luck@intel.com>
Acked-by: Aristeu Rozanski <aris@ruivo.org>
Link: https://lore.kernel.org/r/20230515143225.GC4090740@cathedrallabs.org
arch/x86/kernel/cpu/mce/core.c
arch/x86/kernel/cpu/mce/intel.c
arch/x86/kernel/cpu/mce/internal.h