Rockbox mail archive
Subject: Re: Red freeze
From: Mike Holden (rockbox_at_mikeholden.uklinux.net)
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!
Page was last modified "Jan 10 2012" The Rockbox Crew