• Yazen Ghannam's avatar
    x86/mce/AMD, EDAC/mce_amd: Enumerate Reserved SMCA bank type · 68627a69
    Yazen Ghannam authored
    Currently, bank 4 is reserved on Fam17h, so we chose not to initialize
    bank 4 in the smca_banks array. This means that when we check if a bank
    is initialized, like during boot or resume, we will see that bank 4 is
    not initialized and try to initialize it.
    This will cause a call trace, when resuming from suspend, due to
    rdmsr_*on_cpu() calls in the init path. The rdmsr_*on_cpu() calls issue
    an IPI but we're running with interrupts disabled. This triggers:
      WARNING: CPU: 0 PID: 11523 at kernel/smp.c:291 smp_call_function_single+0xdc/0xe0
    Reserved banks will be read-as-zero, so their MCA_IPID register will be
    zero. So, like the smca_banks array, the threshold_banks array will not
    have an entry for a reserved bank since all its MCA_MISC* registers will
    be zero.
    Enumerate a "Reserved" bank type that matches on a HWID_MCATYPE of 0,0.
    Use the "Reserved" type when checking if a bank is reserved. It's
    possible that other bank numbers may be reserved on future systems.
    Don't try to find the block address on reserved banks.
    Signed-off-by: default avatarYazen Ghannam <yazen.ghannam@amd.com>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Cc: <stable@vger.kernel.org> # 4.14.x
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: linux-edac <linux-edac@vger.kernel.org>
    Link: http://lkml.kernel.org/r/20180221101900.10326-7-bp@alien8.de
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
mce_amd.c 24.5 KB