Messages in this thread - First message in thread
- "Luck, Tony"
- "Luck, Tony"
- "Luck, Tony"
- "Luck, Tony"
- "Luck, Tony"
- "Luck, Tony"
- "Luck, Tony"
- "Luck, Tony"
- "Luck, Tony"
- "Luck, Tony"
- "Luck, Tony"
Patch in this message | | | From | "Luck, Tony" <> | Subject | [PATCH 05/10] MCE: Mask out address mask bits below address granuality | Date | Thu, 09 Jun 2011 14:33:42 -0700 |
| |
From: Andi Kleen <andi@firstfloor.org>
SER enabled systems report the address granuality for each reported address in a machine check. But the bits below the granuality are undefined. Mask them out before logging the machine check.
Signed-off-by: Andi Kleen <ak@linux.intel.com> Signed-off-by: Tony Luck <tony.luck@intel.com> --- arch/x86/kernel/cpu/mcheck/mce.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-)
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index 0349e87..ffc8d11 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c @@ -539,8 +539,18 @@ static void mce_read_aux(struct mce *m, int i) { if (m->status & MCI_STATUS_MISCV) m->misc = mce_rdmsrl(MSR_IA32_MCx_MISC(i)); - if (m->status & MCI_STATUS_ADDRV) + if (m->status & MCI_STATUS_ADDRV) { m->addr = mce_rdmsrl(MSR_IA32_MCx_ADDR(i)); + + /* + * Mask the reported address by the reported granuality. + */ + if (mce_ser && (m->status & MCI_STATUS_MISCV)) { + u8 shift = m->misc & 0x1f; + m->addr >>= shift; + m->addr <<= shift; + } + } } DEFINE_PER_CPU(unsigned, mce_poll_count); -- 1.7.3.1
| |