ide-test: fix timeouts

Use explicit timeouts instead of trying to approximate it by counting
the cumulative duration of nsleep calls.

In practice, the timeout if inb() dwarfed the nsleep delays, and as a
result the real timeout value became a lot larger than 5 seconds.

So: change the semantics from "Not sooner than 5 seconds" to "no more
than 5 seconds" to ensure we don't hang the tester for very long.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Message-id: 1448393771-15483-2-git-send-email-jsnow@redhat.com
This commit is contained in:
John Snow 2015-11-24 14:36:11 -05:00
parent 73a27d9ac3
commit 9c73517ca5

View File

@ -642,15 +642,19 @@ static void nsleep(int64_t nsecs)
static uint8_t ide_wait_clear(uint8_t flag)
{
int i;
uint8_t data;
time_t st;
/* Wait with a 5 second timeout */
for (i = 0; i <= 12500000; i++) {
time(&st);
while (true) {
data = inb(IDE_BASE + reg_status);
if (!(data & flag)) {
return data;
}
if (difftime(time(NULL), st) > 5.0) {
break;
}
nsleep(400);
}
g_assert_not_reached();
@ -658,14 +662,18 @@ static uint8_t ide_wait_clear(uint8_t flag)
static void ide_wait_intr(int irq)
{
int i;
time_t st;
bool intr;
for (i = 0; i <= 12500000; i++) {
time(&st);
while (true) {
intr = get_irq(irq);
if (intr) {
return;
}
if (difftime(time(NULL), st) > 5.0) {
break;
}
nsleep(400);
}