Promise IDE DMA issue

From: John Wong
Date: Mon Jan 03 2005 - 10:08:53 EST


I recently upgraded fron a nVidia nForce2 MCP-T based A7NX-DX
motherboard to an A8V DX, Via K8T800 Pro. Now occassionally, I get
DMA issues on a drive attached to a Promise 133 TX2 controller (20269).

Jan 1 11:14:51 gambit kernel: hde: dma_timer_expiry: dma status == 0x64
Jan 1 11:16:01 gambit kernel: hdh: dma_timer_expiry: dma status == 0x64
Jan 1 11:16:01 gambit kernel: PDC202XX: Primary channel reset.
Jan 1 11:16:01 gambit kernel: hde: DMA interrupt recovery
Jan 1 11:16:01 gambit kernel: hde: lost interrupt
Jan 1 11:16:01 gambit kernel: PDC202XX: Secondary channel reset.
Jan 1 11:16:01 gambit kernel: hdh: DMA interrupt recovery
Jan 1 11:16:01 gambit kernel: hdh: lost interrupt
Jan 1 11:16:01 gambit kernel: hde: dma_timer_expiry: dma status == 0x64
Jan 1 11:16:01 gambit kernel: PDC202XX: Primary channel reset.
Jan 1 11:16:01 gambit kernel: hde: DMA interrupt recovery
Jan 1 11:16:01 gambit kernel: hde: lost interrupt
Jan 1 11:16:01 gambit kernel: hde: dma_timer_expiry: dma status == 0x64
Jan 1 11:16:01 gambit kernel: PDC202XX: Primary channel reset.
Jan 1 11:18:31 gambit kernel: hde: DMA interrupt recovery
Jan 1 11:18:31 gambit kernel: hde: lost interrupt
Jan 1 11:18:31 gambit kernel: hde: dma_timer_expiry: dma status == 0x64
Jan 1 11:18:31 gambit kernel: PDC202XX: Primary channel reset.
Jan 1 11:18:31 gambit kernel: hde: DMA interrupt recovery
Jan 1 11:18:31 gambit kernel: hde: lost interrupt
Jan 1 11:18:31 gambit kernel: hde: dma_timer_expiry: dma status == 0x64
Jan 1 11:18:31 gambit kernel: PDC202XX: Primary channel reset.
Jan 1 11:18:31 gambit kernel: hde: DMA interrupt recovery
Jan 1 11:18:31 gambit kernel: hde: lost interrupt
Jan 1 11:18:31 gambit kernel: hde: dma_timer_expiry: dma status == 0x64
Jan 1 11:18:31 gambit kernel: PDC202XX: Primary channel reset.
Jan 1 11:18:31 gambit kernel: hde: DMA interrupt recovery
Jan 1 11:18:31 gambit kernel: hde: lost interrupt
Jan 1 11:18:31 gambit kernel: hde: dma_timer_expiry: dma status == 0x64
Jan 1 11:19:31 gambit kernel: PDC202XX: Primary channel reset.
Jan 1 11:19:31 gambit kernel: hde: DMA interrupt recovery
Jan 1 11:19:31 gambit kernel: hde: lost interrupt
Jan 1 11:19:31 gambit kernel: hde: dma_timer_expiry: dma status == 0x64
Jan 1 11:19:31 gambit kernel: PDC202XX: Primary channel reset.
Jan 1 11:19:31 gambit kernel: hde: DMA interrupt recovery
Jan 1 11:19:31 gambit kernel: hde: lost interrupt
Jan 1 11:19:31 gambit kernel: hde: dma_timer_expiry: dma status == 0x64
Jan 1 11:19:31 gambit kernel: PDC202XX: Primary channel reset.
Jan 1 11:19:31 gambit kernel: hde: DMA interrupt recovery
Jan 1 11:19:31 gambit kernel: hde: lost interrupt
Jan 1 11:19:31 gambit kernel: hde: dma_timer_expiry: dma status == 0x64
Jan 1 11:19:31 gambit kernel: PDC202XX: Primary channel reset.
Jan 1 11:19:31 gambit kernel: hde: DMA interrupt recovery
Jan 1 11:19:31 gambit kernel: hde: lost interrupt
Jan 1 11:19:51 gambit kernel: hde: dma_timer_expiry: dma status == 0x64
Jan 1 11:20:01 gambit kernel: PDC202XX: Primary channel reset.
Jan 1 11:20:01 gambit kernel: hde: DMA interrupt recovery
Jan 1 11:20:01 gambit kernel: hde: lost interrupt
Jan 1 11:20:21 gambit kernel: hde: dma_timer_expiry: dma status == 0x64
Jan 1 11:20:31 gambit kernel: PDC202XX: Primary channel reset.
Jan 1 11:20:31 gambit kernel: hde: DMA interrupt recovery
Jan 1 11:20:31 gambit kernel: hde: lost interrupt
Jan 1 11:20:51 gambit kernel: hde: dma_timer_expiry: dma status == 0x64
Jan 1 11:21:01 gambit kernel: PDC202XX: Primary channel reset.
Jan 1 11:21:01 gambit kernel: hde: DMA interrupt recovery
Jan 1 11:21:01 gambit kernel: hde: lost interrupt
Jan 1 11:21:21 gambit kernel: hde: dma_timer_expiry: dma status == 0x64
Jan 1 11:21:31 gambit kernel: PDC202XX: Primary channel reset.
Jan 1 11:21:31 gambit kernel: hde: DMA interrupt recovery
Jan 1 11:21:31 gambit kernel: hde: lost interrupt
Jan 1 11:21:51 gambit kernel: hde: dma_timer_expiry: dma status == 0x64
Jan 1 11:22:01 gambit kernel: PDC202XX: Primary channel reset.
Jan 1 11:22:01 gambit kernel: hde: DMA interrupt recovery
Jan 1 11:22:01 gambit kernel: hde: lost interrupt

hde and hdh are identical Seagate ST3200822A
hdf and hdg are Maxtor 6Y120P0 and 6Y120L0, however, they weren't
mounted and are manually mounted as needed as they are FAT32 and NTFS.

Jan 2 06:25:35 gambit kernel: hde: dma_intr: status=0x50 { DriveReady
SeekCompl
ete }
Jan 2 06:25:35 gambit kernel:
Jan 2 06:25:35 gambit kernel: ide: failed opcode was: unknown

The above happened at 6:25 which coincides with Debian's cron.daily
runs (most likely the updating of the locate database).


I've seen http://seclists.org/lists/linux-kernel/2003/Oct/4754.html
where someone suggests disabling autotune to work around the problem.
Without DMA, the DMA problem shouldn't happen, but this would slow
things down.

http://www.uwsg.iu.edu/hypermail/linux/kernel/0412.2/1569.html
mentions about needing multiple independent PCI buses for more than 2
DMA transfers at a time.

My lspci output from the old A7NX (nVidia nForce2) does appear to have
more PCI buses. It looks to have a 0, 1, 2, 3 with 3 looking to be the
AGP bus. The A8V (Via K8T800 Pro) on the other hand looks to have just
0, and 1 with 1 being the AGP bus.


John
-
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/