• Yazen Ghannam's avatar
    x86/MCE/AMD: Clear DFR errors found in THR handler · bc1b705b
    Yazen Ghannam authored
    AMD's MCA Thresholding feature counts errors of all severity levels, not
    just correctable errors. If a deferred error causes the threshold limit
    to be reached (it was the error that caused the overflow), then both a
    deferred error interrupt and a thresholding interrupt will be triggered.
    
    The order of the interrupts is not guaranteed. If the threshold
    interrupt handler is executed first, then it will clear MCA_STATUS for
    the error. It will not check or clear MCA_DESTAT which also holds a copy
    of the deferred error. When the deferred error interrupt handler runs it
    will not find an error in MCA_STATUS, but it will find the error in
    MCA_DESTAT. This will cause two errors to be logged.
    
    Check for deferred errors when handling a threshold interrupt. If a bank
    contains a deferred error, then clear the bank's MCA_DESTAT register.
    
    Define a new helper function to do the deferred error check and clearing
    of MCA_DESTAT.
    
      [ bp: Simplify, convert comment to passive voice. ]
    
    Fixes: 37d43acf ("x86/mce/AMD: Redo error logging from APIC LVT interrupt handlers")
    Signed-off-by: default avatarYazen Ghannam <yazen.ghannam@amd.com>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20220621155943.33623-1-yazen.ghannam@amd.com
    bc1b705b
amd.c 33 KB