Rockbox mail archiveSubject: Re: Red freeze
Re: Red freeze
From: Mike Holden <rockbox_at_mikeholden.uklinux.net>
Date: Mon, 31 Mar 2003 11:52:19 +0100 (BST)
Mike Holden said:
> We hit a disk error and the mpeg thread skips to the next track. It then
> tries to start loading the next track, and gets as far as the
> perform_soft_reset() at the top of ata_read_sectors(). This calls
> wait_for_rdy() which calls wait_for_busy(). Both of these function calls
> will wait for 10 seconds each before timing out and returning. On top of
> this, the perform_soft_reset() then loops round calling wait_for_rdy() 9
> times (the count is 8, but it loops 9 times!), thus giving 9 * 20
> seconds = 3 ___minutes___ (the comment says "up to 30 seconds")!!!!
> perform_soft_reset() thus fails, and we return -1 from
> ata_read_sectors(). This failure takes at least 3 minutes. The mpeg code
> then skips to the next track and the whole process starts again.
Just looked at the code again, and this is not quite right. If
wait_for_bsy() fails, then wait_for_rdy() returns immediately, thus giving
a total delay of 10 seconds per loop, so 90 seconds total wait rather than
3 minutes. Still a lot though!
-- Mike HoldenReceived on 2003-03-31