On Fri, 25 Feb 2011, Jan Beulich wrote:
> > Because it might not have anything to do with dom0: I wrote this patch
>
> As you say: might.
>
Ok.
---
Memory parity error is only valid for IBM PC-AT, newer machines use
bit 7 (0x80) of 0x61 port for PCI SERR. While memory errors are
usually reported via MCE.
Rename the memory parity error handler to pci serr handler and
print a warning and continue instead of crashing (it is common to
receive PCI SERR errors for performing operations on a device in the
wrong power state).
Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
diff -r 598d1fc295b6 xen/arch/x86/traps.c
--- a/xen/arch/x86/traps.c Thu Feb 24 09:33:19 2011 +0000
+++ b/xen/arch/x86/traps.c Fri Feb 25 14:04:08 2011 +0000
@@ -3075,23 +3075,13 @@ static void nmi_dom0_report(unsigned int
send_guest_trap(d, 0, TRAP_nmi);
}
-static void mem_parity_error(struct cpu_user_regs *regs)
+static void pci_serr_error(struct cpu_user_regs *regs)
{
- switch ( opt_nmi[0] )
- {
- case 'd': /* 'dom0' */
- nmi_dom0_report(_XEN_NMIREASON_parity_error);
- case 'i': /* 'ignore' */
- break;
- default: /* 'fatal' */
- console_force_unlock();
- printk("\n\nNMI - MEMORY ERROR\n");
- fatal_trap(TRAP_nmi, regs);
- }
+ nmi_dom0_report(_XEN_NMIREASON_pci_serr_error);
+ console_force_unlock();
+ printk("\n\nNMI - PCI system error (SERR)\n");
- outb((inb(0x61) & 0x0f) | 0x04, 0x61); /* clear-and-disable parity check */
- mdelay(1);
- outb((inb(0x61) & 0x0b) | 0x00, 0x61); /* enable parity check */
+ outb((inb(0x61) & 0x0f) | 0x04, 0x61); /* clear-and-disable the PCI SERR
error line. */
}
static void io_check_error(struct cpu_user_regs *regs)
@@ -3154,7 +3144,7 @@ asmlinkage void do_nmi(struct cpu_user_r
{
reason = inb(0x61);
if ( reason & 0x80 )
- mem_parity_error(regs);
+ pci_serr_error(regs);
else if ( reason & 0x40 )
io_check_error(regs);
else if ( !nmi_watchdog )
diff -r 598d1fc295b6 xen/include/public/nmi.h
--- a/xen/include/public/nmi.h Thu Feb 24 09:33:19 2011 +0000
+++ b/xen/include/public/nmi.h Fri Feb 25 14:04:08 2011 +0000
@@ -39,6 +39,9 @@
/* Parity error reported via ISA port 0x61, bit 7. */
#define _XEN_NMIREASON_parity_error 1
#define XEN_NMIREASON_parity_error (1UL << _XEN_NMIREASON_parity_error)
+ /* PCI SERR error reported via ISA port 0x61, bit 7. */
+#define _XEN_NMIREASON_pci_serr_error 1
+#define XEN_NMIREASON_pci_serr_error (1UL << _XEN_NMIREASON_pci_serr_error)
/* Unknown hardware-generated NMI. */
#define _XEN_NMIREASON_unknown 2
#define XEN_NMIREASON_unknown (1UL << _XEN_NMIREASON_unknown)
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|