Re: Catching NForce2 lockup with NMI watchdog - found?

From: Ian Kumlien
Date: Sat Dec 06 2003 - 14:34:30 EST


Hi, i'm now running this patch and it survived my grep in /usr/src.

It's mainly a correction of the apic patch and the ACPI halt disconnect
patch that was originally done for 2.6...

I'll get back to you about uptime, but i think this is it...

Although i would prefer a not so workaroundish approach =)

--
Ian Kumlien <pomac () vapor ! com> -- http://pomac.netswarm.net
--- arch/i386/kernel/mpparse.c.orig 2003-11-28 19:26:19.000000000 +0100
+++ arch/i386/kernel/mpparse.c 2003-12-06 19:35:15.000000000 +0100
@@ -1140,7 +1140,8 @@
*/
for (i = 0; i < mp_irq_entries; i++) {
if ((mp_irqs[i].mpc_dstapic == intsrc.mpc_dstapic)
- && (mp_irqs[i].mpc_srcbusirq == intsrc.mpc_srcbusirq)) {
+ && (mp_irqs[i].mpc_srcbusirq == intsrc.mpc_srcbusirq)
+ && (mp_irqs[i].mpc_irqtype == intsrc.mpc_irqtype)) {
mp_irqs[i] = intsrc;
found = 1;
break;
--- arch/i386/kernel/pci-pc.c.orig 2003-12-06 19:32:44.000000000 +0100
+++ arch/i386/kernel/pci-pc.c 2003-12-06 19:33:55.000000000 +0100
@@ -1328,6 +1328,18 @@
dev->transparent = 1;
}

+/*
+ * Halt Disconnect and Stop Grant Disconnect (bit 4 at offset 0x6F)
+ * must be disabled when APIC is used (or lockups will happen).
+ */
+static void __devinit pci_fixup_nforce2_disconnect(struct pci_dev *d)
+{
+ u8 t;
+
+ pci_read_config_byte(d, 0x6F, &t);
+ pci_write_config_byte(d, 0x6F, (t & 0xef));
+}
+
struct pci_fixup pcibios_fixups[] = {
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82451NX, pci_fixup_i450nx },
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454GX, pci_fixup_i450gx },
@@ -1343,6 +1355,7 @@
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8367_0, pci_fixup_via_northbridge_bug },
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C810, pci_fixup_ncr53c810 },
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_fixup_transparent_bridge },
+ { PCI_FIXUP_HEADER, PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2, pci_fixup_nforce2_disconnect },
{ 0 }
};

Attachment: signature.asc
Description: This is a digitally signed message part