Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/pci explicitly disable INTx interrupts to avoid inte...



details:   https://anonhg.NetBSD.org/src/rev/977a4fbc56a2
branches:  trunk
changeset: 973052:977a4fbc56a2
user:      jdolecek <jdolecek%NetBSD.org@localhost>
date:      Wed Jun 17 14:04:03 2020 +0000

description:
explicitly disable INTx interrupts to avoid interrupt storm triggered by
unhandled adapter interrupts

fixes PR kern/46596 by Andreas Gustafsson, fix adopted from FreeBSD

diffstat:

 sys/dev/pci/vga_pci.c |  14 ++++++++++++--
 1 files changed, 12 insertions(+), 2 deletions(-)

diffs (35 lines):

diff -r 4b45c4024468 -r 977a4fbc56a2 sys/dev/pci/vga_pci.c
--- a/sys/dev/pci/vga_pci.c     Wed Jun 17 13:09:16 2020 +0000
+++ b/sys/dev/pci/vga_pci.c     Wed Jun 17 14:04:03 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: vga_pci.c,v 1.55 2016/07/07 06:55:41 msaitoh Exp $     */
+/*     $NetBSD: vga_pci.c,v 1.56 2020/06/17 14:04:03 jdolecek Exp $    */
 
 /*
  * Copyright (c) 1995, 1996 Carnegie-Mellon University.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vga_pci.c,v 1.55 2016/07/07 06:55:41 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vga_pci.c,v 1.56 2020/06/17 14:04:03 jdolecek Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -230,6 +230,16 @@
                            "WARNING: strange BAR @ 0x%02x\n", reg);
        }
 
+       /*
+        * Disable INTx interrupts, there is no specific chipset driver for
+        * this PCI device. Else unhandled display adapter interrupts
+        * might freeze the CPU.
+        */
+       pcireg_t cmd  = pci_conf_read(pa->pa_pc, pa->pa_tag,
+           PCI_COMMAND_STATUS_REG);
+       pci_conf_write(pa->pa_pc, pa->pa_tag, PCI_COMMAND_STATUS_REG,
+           cmd | PCI_COMMAND_INTERRUPT_DISABLE);
+
        /* XXX Expansion ROM? */
 
        vga_common_attach(sc, pa->pa_iot, pa->pa_memt, WSDISPLAY_TYPE_PCIVGA,



Home | Main Index | Thread Index | Old Index