RE: BUG: nforce IDE DMA with APIC enabled bug has re-emergedKernel 2.6.4

From: Attila BODY
Date: Sat Apr 03 2004 - 17:38:23 EST


Hi,

>The ugly nforce IDE DMA with APIC enabled bug has re-emerged on my
>system

>Kernel 2.6.4 fails, they hard lock linux no ctrl-alt-delete, music goes
>bzzzzt then stops. I have to either 6 seconds on the power switch or
>hit the
>reset switch to reboot. This usually occurs within a few minutes of
>booting
>or faster if I force a large disk read or copy.

Almost the same here.

I cannot reproduce the issue on my asus a7n8x with the same HDD &
installed OS, only on biostar M7NCD Pro. a7n8x has an Barton 2500 with
166MHz FSB, m7ncd has an XP 1700 with 133MHz FSB. The machine freezes
completely, the IDE activity led stays on.

It also happens if I disable APIC in the BIOS or passing noapic to the
kernel

A dd if=/dev/hda of=/dev/null freezes the system almost immediately.

Fedora Core 2 Test1 with kernel 2.6.1 seems working, also 2.4 series.
Debian's and stock 2.6.3 works like a charm, but stock 2.6.3 freezes.

2.6.5-rc3-mm4 shows the same sympthoms, dd causes death almost
immediately.

Back to stock 2.6.4:

It seems that disabling both ACPI and APIC in the kernel config solves
the problem

hdparm -d0 also solves the problem but performance is awful without DMA

Finally it seems there is a solution: I've updated the patch
http://www.kernel.org/pub/linux/kernel/people/bart/2.6.0-test11-bart1/broken-out/nforce2-disconnect-quirk.patch
to be able to apply to 2.6.4 and now everything is working flawlessly.

Can anyone enlighten me why isn't it merged to the mainstream kernel
yet? I've found lots of people with the same problems while searching
for the solution to mine, so it seems a common problem with some nforce2
motherboards.

Here is the modified patch:

>>>>>>>>>>>CUT HERE <<<<<<<<<<<<
diff -upNr linux-2.6.4/arch/i386/pci/fixup.c
linux-2.6.4.nf2/arch/i386/pci/fixup.c
--- linux-2.6.4/arch/i386/pci/fixup.c 2004-03-11 03:55:36.000000000
+0100
+++ linux-2.6.4.nf2/arch/i386/pci/fixup.c 2004-04-03 20:55:24.000000000
+0200
@@ -187,6 +187,22 @@ static void __devinit pci_fixup_transpar
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);
+ if (t & 0x10) {
+ printk(KERN_INFO "PCI: disabling nForce2 Halt Disconnect"
+ " and Stop Grant Disconnect\n");
+ pci_write_config_byte(d, 0x6F, (t & 0xef));
+ }
+}
+
struct pci_fixup pcibios_fixups[] = {
{
.pass = PCI_FIXUP_HEADER,
@@ -290,5 +306,11 @@ struct pci_fixup pcibios_fixups[] = {
.device = PCI_ANY_ID,
.hook = pci_fixup_transparent_bridge
},
+ {
+ .pass = PCI_FIXUP_HEADER,
+ .vendor = PCI_VENDOR_ID_NVIDIA,
+ .device = PCI_DEVICE_ID_NVIDIA_NFORCE2,
+ .hook = pci_fixup_nforce2_disconnect
+ },
{ .pass = 0 }
};
>>>>>>>>>>>CUT HERE <<<<<<<<<<<<


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/