• Tony Luck's avatar
    x86/mce: Avoid reading every machine check bank register twice. · 95022b8c
    Tony Luck authored
    Reading machine check bank registers is slow. There is a trend of
    increasing the number of banks, and the number of cores. The main section
    of do_machine_check() is a serialized section where each cpu in turn
    checks every bank. Even on a little two socket SandyBridge-EP system
    that multiplies out as:
    
    	2 sockets * 8 cores * 2 hyperthreads * 20 banks = 640 MSRs
    
    We already scan the banks in parallel in mce_no_way_out() to see if there
    is a fatal error anywhere in the system. If we build a cache of VALID
    bits during this scan, we can avoid uselessly re-reading banks that have
    no data. Note that this cache is only a hint. If the valid bit is set in a
    shared bank, all cpus that share that bank will see it during the parallel
    scan, but the first to find it in the sequential scan will (usually) clear
    the bank.
    Acked-by: default avatarBorislav Petkov <borislav.petkov@amd.com>
    Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
    95022b8c
mce.c 53.4 KB