ide_dma_timeout_retry() in ide-io.c
prints the "hdc: DMA Timeout error" then calls
HWIF(drive)->ide_dma_end(drive);
which returns, and then calls
hwif->INB(IDE_STATUS_REG) which is needed as an argument to ide_error()
But this hangs! -- The INB never returns.
Now: hwif->INB = ide_inb; in ide-iops.c
Yep and the I/O cycle never completes so the box hangs. This occurs if
the drive blows up and never switches IORDY to indicate completion. The
hpt will also do this sometimes if it gets addled by a confused drive,
while an intel one often won't.
Alan