diff options
-rw-r--r-- | arch/x86/kernel/cpu/mcheck/mce.c | 10 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/mcheck/mce_amd.c | 13 |
2 files changed, 22 insertions, 1 deletions
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index 7d905e3d58a2..a7fdf453d895 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c | |||
@@ -588,6 +588,16 @@ static void mce_read_aux(struct mce *m, int i) | |||
588 | m->addr >>= shift; | 588 | m->addr >>= shift; |
589 | m->addr <<= shift; | 589 | m->addr <<= shift; |
590 | } | 590 | } |
591 | |||
592 | /* | ||
593 | * Extract [55:<lsb>] where lsb is the least significant | ||
594 | * *valid* bit of the address bits. | ||
595 | */ | ||
596 | if (mce_flags.smca) { | ||
597 | u8 lsb = (m->addr >> 56) & 0x3f; | ||
598 | |||
599 | m->addr &= GENMASK_ULL(55, lsb); | ||
600 | } | ||
591 | } | 601 | } |
592 | 602 | ||
593 | if (mce_flags.smca) { | 603 | if (mce_flags.smca) { |
diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c index d2f92ab5322f..9b5403462936 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_amd.c +++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c | |||
@@ -561,9 +561,20 @@ __log_error(unsigned int bank, bool deferred_err, bool threshold_err, u64 misc) | |||
561 | if (threshold_err) | 561 | if (threshold_err) |
562 | m.misc = misc; | 562 | m.misc = misc; |
563 | 563 | ||
564 | if (m.status & MCI_STATUS_ADDRV) | 564 | if (m.status & MCI_STATUS_ADDRV) { |
565 | rdmsrl(msr_addr, m.addr); | 565 | rdmsrl(msr_addr, m.addr); |
566 | 566 | ||
567 | /* | ||
568 | * Extract [55:<lsb>] where lsb is the least significant | ||
569 | * *valid* bit of the address bits. | ||
570 | */ | ||
571 | if (mce_flags.smca) { | ||
572 | u8 lsb = (m.addr >> 56) & 0x3f; | ||
573 | |||
574 | m.addr &= GENMASK_ULL(55, lsb); | ||
575 | } | ||
576 | } | ||
577 | |||
567 | if (mce_flags.smca) { | 578 | if (mce_flags.smca) { |
568 | rdmsrl(MSR_AMD64_SMCA_MCx_IPID(bank), m.ipid); | 579 | rdmsrl(MSR_AMD64_SMCA_MCx_IPID(bank), m.ipid); |
569 | 580 | ||