From mboxrd@z Thu Jan 1 00:00:00 1970 From: Keir Fraser Subject: Re: [PATCH] x86: restore (optional) forwarding of PCI SERR induced NMI to Dom0 Date: Mon, 21 Jan 2013 16:28:36 +0000 Message-ID: References: <50FD76BD02000078000B7FBF@nat28.tlf.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <50FD76BD02000078000B7FBF@nat28.tlf.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Jan Beulich , xen-devel Cc: Stefano Stabellini List-Id: xen-devel@lists.xenproject.org On 21/01/2013 16:11, "Jan Beulich" wrote: > c/s 22949:54fe1011f86b removed the forwarding of NMIs to Dom0 when they > were caused by PCI SERR. NMI buttons as well as BMCs (like HP's iLO) > may however want such events to be seen in Dom0 (e.g. to trigger a > dump). > > Therefore restore most of the functionality which named c/s removed > (adjusted for subsequent changes, and adjusting the public interface to > use the modern term, retaining the old one for backwards > compatibility). > > Signed-off-by: Jan Beulich Acked-by: Keir Fraser > --- a/xen/arch/x86/traps.c > +++ b/xen/arch/x86/traps.c > @@ -3089,6 +3089,7 @@ static void nmi_mce_softirq(void) > static void pci_serr_softirq(void) > { > printk("\n\nNMI - PCI system error (SERR)\n"); > + outb(inb(0x61) & 0x0b, 0x61); /* re-enable the PCI SERR error line. */ > } > > void async_exception_cleanup(struct vcpu *curr) > @@ -3135,9 +3136,20 @@ static void pci_serr_error(struct cpu_us > { > outb((inb(0x61) & 0x0f) | 0x04, 0x61); /* clear-and-disable the PCI SERR > error line. */ > > - /* Would like to print a diagnostic here but can't call printk() > - from NMI context -- raise a softirq instead. */ > - raise_softirq(PCI_SERR_SOFTIRQ); > + switch ( opt_nmi[0] ) > + { > + case 'd': /* 'dom0' */ > + nmi_dom0_report(_XEN_NMIREASON_pci_serr); > + case 'i': /* 'ignore' */ > + /* Would like to print a diagnostic here but can't call printk() > + from NMI context -- raise a softirq instead. */ > + raise_softirq(PCI_SERR_SOFTIRQ); > + break; > + default: /* 'fatal' */ > + console_force_unlock(); > + printk("\n\nNMI - PCI system error (SERR)\n"); > + fatal_trap(TRAP_nmi, regs); > + } > } > > static void io_check_error(struct cpu_user_regs *regs) > --- a/xen/include/public/nmi.h > +++ b/xen/include/public/nmi.h > @@ -36,9 +36,14 @@ > /* I/O-check error reported via ISA port 0x61, bit 6. */ > #define _XEN_NMIREASON_io_error 0 > #define XEN_NMIREASON_io_error (1UL << _XEN_NMIREASON_io_error) > + /* PCI SERR reported via ISA port 0x61, bit 7. */ > +#define _XEN_NMIREASON_pci_serr 1 > +#define XEN_NMIREASON_pci_serr (1UL << _XEN_NMIREASON_pci_serr) > +#if __XEN_INTERFACE_VERSION__ < 0x00040300 /* legacy alias of the above */ > /* 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) > +#endif > /* Unknown hardware-generated NMI. */ > #define _XEN_NMIREASON_unknown 2 > #define XEN_NMIREASON_unknown (1UL << _XEN_NMIREASON_unknown) > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel