[PATCH -v2 3/7] x86, NMI, Rename memory parity error to PCI SERR error

Huang Ying
2010-09-27T00:57:33Z

memory parity error is only valid for IBM PC-AT, newer machine use 7
bit (0x80) of 0x61 port for PCI SERR. While memory error is usually
reported via MCE. So corresponding function name and kernel log string
is changed.

But on some machines, PCI SERR line is still used to report memory
errors. This is used by EDAC, so corresponding EDAC call is reserved.

v2:

- EDAC call in pci_serr_error is reserved.

Signed-off-by: Huang Ying <ying.huang@intel.com>
---
arch/x86/include/asm/mach_traps.h | 6 +++---
arch/x86/kernel/traps.c | 21 ++++++++++-----------
2 files changed, 13 insertions(+), 14 deletions(-)

--- a/arch/x86/include/asm/mach_traps.h
+++ b/arch/x86/include/asm/mach_traps.h
@@ -9,11 +9,11 @@

#define NMI_REASON_PORT 0x61

-#define NMI_REASON_MEMPAR 0x80
+#define NMI_REASON_SERR 0x80
#define NMI_REASON_IOCHK 0x40
-#define NMI_REASON_MASK (NMI_REASON_MEMPAR | NMI_REASON_IOCHK)
+#define NMI_REASON_MASK (NMI_REASON_SERR | NMI_REASON_IOCHK)

-#define NMI_REASON_CLEAR_MEMPAR 0x04
+#define NMI_REASON_CLEAR_SERR 0x04
#define NMI_REASON_CLEAR_IOCHK 0x08
#define NMI_REASON_CLEAR_MASK 0x0f

--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -301,15 +301,14 @@ gp_in_kernel:
}

static notrace __kprobes void
-mem_parity_error(unsigned char reason, struct pt_regs *regs)
+pci_serr_error(unsigned char reason, struct pt_regs *regs)
{
- printk(KERN_EMERG
- "Uhhuh. NMI received for unknown reason %02x on CPU %d.\n",
- reason, smp_processor_id());
-
- printk(KERN_EMERG
- "You have some hardware problem, likely on the PCI bus.\n");
+ printk(KERN_EMERG "NMI: PCI system error (SERR).\n");

+ /*
+ * On some machines, PCI SERR line is used to report memory
+ * errors. EDAC makes use of it.
+ */
#if defined(CONFIG_EDAC)
if (edac_handler_set()) {
edac_atomic_assert_error();
@@ -322,8 +321,8 @@ mem_parity_error(unsigned char reason, s

printk(KERN_EMERG "Dazed and confused, but trying to continue\n");

- /* Clear and disable the memory parity error line. */
- reason = (reason & NMI_REASON_CLEAR_MASK) | NMI_REASON_CLEAR_MEMPAR;
+ /* Clear and disable the PCI SERR error line. */
+ reason = (reason & NMI_REASON_CLEAR_MASK) | NMI_REASON_CLEAR_SERR;
outb(reason, NMI_REASON_PORT);
}

@@ -420,8 +419,8 @@ static notrace __kprobes void default_do
return;

/* AK: following checks seem to be broken on modern chipsets. FIXME */
- if (reason & NMI_REASON_MEMPAR)
- mem_parity_error(reason, regs);
+ if (reason & NMI_REASON_SERR)
+ pci_serr_error(reason, regs);
if (reason & NMI_REASON_IOCHK)
io_check_error(reason, regs);
#ifdef CONFIG_X86_32