Ah, that makes sense -- during PIO interrupts happen a lot more often.
20 secs still seem to be too much.
I don't think so, even for modern drives.
Figure 8-10 seconds max for spin-up,
plus 6-9 seconds to do a sector re-assignment
or retries on a bad block (a measured *real-life* value).
That adds up to 14-19 seconds, so 20 seconds is probably good.
Still, this does need to be adjustable for faster (CF) devices,
and slower (optical/tape) devices, rather than just a single
set of fixed timeout values.
In real life, with real bad blocks on real harddrives, some harddrives
take more than the DMA TIMEOUT time to read a single block, even without
having to spin up.
The current code then resets the drive, on which the drive reports
"busy, not ready for command", and things go downhill from there.
Roger.