|
@@ -561,9 +561,20 @@ __log_error(unsigned int bank, bool deferred_err, bool threshold_err, u64 misc)
|
|
if (threshold_err)
|
|
if (threshold_err)
|
|
m.misc = misc;
|
|
m.misc = misc;
|
|
|
|
|
|
- if (m.status & MCI_STATUS_ADDRV)
|
|
|
|
|
|
+ if (m.status & MCI_STATUS_ADDRV) {
|
|
rdmsrl(msr_addr, m.addr);
|
|
rdmsrl(msr_addr, m.addr);
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Extract [55:<lsb>] where lsb is the least significant
|
|
|
|
+ * *valid* bit of the address bits.
|
|
|
|
+ */
|
|
|
|
+ if (mce_flags.smca) {
|
|
|
|
+ u8 lsb = (m.addr >> 56) & 0x3f;
|
|
|
|
+
|
|
|
|
+ m.addr &= GENMASK_ULL(55, lsb);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
if (mce_flags.smca) {
|
|
if (mce_flags.smca) {
|
|
rdmsrl(MSR_AMD64_SMCA_MCx_IPID(bank), m.ipid);
|
|
rdmsrl(MSR_AMD64_SMCA_MCx_IPID(bank), m.ipid);
|
|
|
|
|