Skip to contentSkip to conversation

AMD IDE oops in current 2.4-ac

PATCH In review Andreas Arens 3 participants 4 messages Feb 12, 2003

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 AMD IDE oops in current 2.4-ac

Current 2.4.21-pre4-ac kernels oops in amd74xx.c with certain chipsets due to a table order problem. The problem is correctly detected by a BUG() in the pci probe routine, which should trigger for all non-nforce chipsets.

Regards
Andy

The fix, tested on a 7409 Viper board, is simple:

drivers/ide/pci/amd74xx.c +4 -4
@@ -54,11 +54,11 @@
 	unsigned long base;
 	unsigned char flags;
 } amd_ide_chips[] = {
-	{ PCI_DEVICE_ID_AMD_8111_IDE,  0x00, 0x40, AMD_UDMA_100 },			/* AMD-8111 */
-	{ PCI_DEVICE_ID_AMD_OPUS_7441, 0x00, 0x40, AMD_UDMA_100 },			/* AMD-768 Opus */
-	{ PCI_DEVICE_ID_AMD_VIPER_7411, 0x00, 0x40, AMD_UDMA_100 | AMD_BAD_FIFO },	/* AMD-766 Viper */
-	{ PCI_DEVICE_ID_AMD_VIPER_7409, 0x00, 0x40, AMD_UDMA_66 | AMD_CHECK_SWDMA },	/* AMD-756 Viper */
 	{ PCI_DEVICE_ID_AMD_COBRA_7401, 0x00, 0x40, AMD_UDMA_33 | AMD_BAD_SWDMA },	/* AMD-755 Cobra */
+	{ PCI_DEVICE_ID_AMD_VIPER_7409, 0x00, 0x40, AMD_UDMA_66 | AMD_CHECK_SWDMA },	/* AMD-756 Viper */
+	{ PCI_DEVICE_ID_AMD_VIPER_7411, 0x00, 0x40, AMD_UDMA_100 | AMD_BAD_FIFO },	/* AMD-766 Viper */
+	{ PCI_DEVICE_ID_AMD_OPUS_7441, 0x00, 0x40, AMD_UDMA_100 },			/* AMD-768 Opus */
+	{ PCI_DEVICE_ID_AMD_8111_IDE,  0x00, 0x40, AMD_UDMA_100 },			/* AMD-8111 */
         { PCI_DEVICE_ID_NVIDIA_NFORCE_IDE, 0x00, 0x50, AMD_UDMA_100 },                  /* nVidia nForce */
         { PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE, 0x00, 0x50, AMD_UDMA_100 },                  /* nVidia nForce */
 
#1 lore raw
Quoted 4 lines · Andreas Arens

Current 2.4.21-pre4-ac kernels oops in amd74xx.c with certain chipsets due to a table order problem. The problem is correctly detected by a BUG() in the pci probe routine, which should trigger for all non-nforce chipsets.

If moving entries in the table caused a bug, adding new entries could do the same too perhaps ? This sounds quite fragile based on your description & diff.

Dave

Signature · 2 lines
| Dave Jones.        http://www.codemonkey.org.uk
| SuSE Labs
#2 lore raw

PATCH 1/1 AMD IDE oops in current 2.4-ac

Quoted 9 lines · Dave Jones
Quoted 4 lines

Current 2.4.21-pre4-ac kernels oops in amd74xx.c with certain chipsets due to a table order problem. The problem is correctly detected by a BUG() in the pci probe routine, which should trigger for all non-nforce chipsets.

If moving entries in the table caused a bug, adding new entries could do the same too perhaps ? This sounds quite fragile based on your description & diff.

amd74xx_probe() compares the pci device ids of both the probe table and the settings table, so should be save from misprogramming.
To protect against using random memory after the end of the table, a bug check on the table size could help:

        if (dev->device != d->device) BUG();
+      if (sizeof(amd_ide_chips) >= id->driver_data) BUG();
        if (dev->device != amd_config->id) BUG();

Even with this it still looks error prone, especially since the probe table and the config table are several lines spread across the file.

Regards
Andy

#3 lore raw
In reply to Dave Jones
Quoted 11 lines · Dave Jones
Quoted 4 lines · Andreas Arens

Current 2.4.21-pre4-ac kernels oops in amd74xx.c with certain chipsets due to a table order problem. The problem is correctly detected by a BUG() in the pci probe routine, which should trigger for all non-nforce chipsets.

If moving entries in the table caused a bug, adding new entries could do the same too perhaps ? This sounds quite fragile based on your description & diff.

Dave

Hello, Dave and other.
Same behavior was in 2.5.5x and I've send similar patch to Linus and it was apllied. Changeset 1.879.1.84. There is two tables and missorder of devices cause a BUG() during init.
Thanks, Ruslan.