WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH] NMI: continue in case of PCI SERR erros

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