summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Snow <jsnow@redhat.com>2015-11-24 14:36:11 -0500
committerJohn Snow <jsnow@redhat.com>2015-11-25 11:37:34 -0500
commit9c73517ca56d6611371376bd298b4b20f3ad6140 (patch)
treedae9713f3ceaea6fa23655ed9c18577d4e954f01
parent73a27d9ac35e3da3a2cf0ebd0bcc2be6de19dd0a (diff)
downloadhqemu-9c73517ca56d6611371376bd298b4b20f3ad6140.zip
hqemu-9c73517ca56d6611371376bd298b4b20f3ad6140.tar.gz
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
-rw-r--r--tests/ide-test.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/tests/ide-test.c b/tests/ide-test.c
index 46763db..c3aacd2 100644
--- a/tests/ide-test.c
+++ b/tests/ide-test.c
@@ -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);
}
OpenPOWER on IntegriCloud