Merge branch 'ras-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 30 Jan 2018 19:48:44 +0000 (11:48 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 30 Jan 2018 19:48:44 +0000 (11:48 -0800)
Pull x86 RAS updates from Ingo Molnar:

 - various AMD SMCA error parsing/reporting improvements (Yazen Ghannam)

 - extend Intel CMCI error reporting to more cases (Xie XiuQi)

* 'ras-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/MCE: Make correctable error detection look at the Deferred bit
  x86/MCE: Report only DRAM ECC as memory errors on AMD systems
  x86/MCE/AMD: Define a function to get SMCA bank type
  x86/mce/AMD: Don't set DEF_INT_TYPE in MSR_CU_DEF_ERR on SMCA systems
  x86/MCE: Extend table to report action optional errors through CMCI too

1  2 
arch/x86/kernel/cpu/mcheck/mce.c

index 868e412b4f0c351795cfa93181e185c210a3d796,1b2c114733768744cc0c15d594e031bbeedfb203..c3655e0fc15677ebb09d1a4ef3debb60b2649c1f
@@@ -503,10 -503,8 +503,8 @@@ static int mce_usable_address(struct mc
  bool mce_is_memory_error(struct mce *m)
  {
        if (m->cpuvendor == X86_VENDOR_AMD) {
-               /* ErrCodeExt[20:16] */
-               u8 xec = (m->status >> 16) & 0x1f;
+               return amd_mce_is_memory_error(m);
  
-               return (xec == 0x0 || xec == 0x8);
        } else if (m->cpuvendor == X86_VENDOR_INTEL) {
                /*
                 * Intel SDM Volume 3B - 15.9.2 Compound Error Codes
  }
  EXPORT_SYMBOL_GPL(mce_is_memory_error);
  
+ static bool mce_is_correctable(struct mce *m)
+ {
+       if (m->cpuvendor == X86_VENDOR_AMD && m->status & MCI_STATUS_DEFERRED)
+               return false;
+       if (m->status & MCI_STATUS_UC)
+               return false;
+       return true;
+ }
  static bool cec_add_mce(struct mce *m)
  {
        if (!m)
  
        /* We eat only correctable DRAM errors with usable addresses. */
        if (mce_is_memory_error(m) &&
-           !(m->status & MCI_STATUS_UC) &&
+           mce_is_correctable(m)  &&
            mce_usable_address(m))
                if (!cec_add_elem(m->addr >> PAGE_SHIFT))
                        return true;
@@@ -1785,11 -1794,6 +1794,11 @@@ static void unexpected_machine_check(st
  void (*machine_check_vector)(struct pt_regs *, long error_code) =
                                                unexpected_machine_check;
  
 +dotraplinkage void do_mce(struct pt_regs *regs, long error_code)
 +{
 +      machine_check_vector(regs, error_code);
 +}
 +
  /*
   * Called for each booted CPU to set up machine checks.
   * Must be called with preempt off: