[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 1/2] ide-test: fix timeouts
From: |
Kevin Wolf |
Subject: |
Re: [Qemu-devel] [PATCH 1/2] ide-test: fix timeouts |
Date: |
Tue, 24 Nov 2015 16:40:18 +0100 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
Am 20.11.2015 um 23:53 hat John Snow geschrieben:
> Use explicit timeouts instead of trying to fudge
> it by counting nsleep calls.
>
> Signed-off-by: John Snow <address@hidden>
Isn't wrapping lines at 50 characters a bit extreme?
I'm wondering why this is a fix. If anything, I would expect the new
version to be less precise because its resolution is much coarser
(1 s vs. 400 ns). Should still be good enough, so both the new and the
old code look okay to me, but I'd appreciate a commit message that tells
the motivation for this change.
Kevin
> tests/ide-test.c | 18 ++++++++++++++----
> 1 file changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/tests/ide-test.c b/tests/ide-test.c
> index fc1ce52..d37dc5e 100644
> --- a/tests/ide-test.c
> +++ b/tests/ide-test.c
> @@ -642,15 +642,20 @@ static void nsleep(int64_t nsecs)
>
> static uint8_t ide_wait_clear(uint8_t flag)
> {
> - int i;
> uint8_t data;
> + time_t st, now;
>
> /* 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;
> }
> + time(&now);
> + if (difftime(now, st) > 5.0) {
> + break;
> + }
> nsleep(400);
> }
> g_assert_not_reached();
> @@ -658,14 +663,19 @@ static uint8_t ide_wait_clear(uint8_t flag)
>
> static void ide_wait_intr(int irq)
> {
> - int i;
> + time_t st, now;
> bool intr;
>
> - for (i = 0; i <= 12500000; i++) {
> + time(&st);
> + while (true) {
> intr = get_irq(irq);
> if (intr) {
> return;
> }
> + time(&now);
> + if (difftime(now, st) > 5.0) {
> + break;
> + }
> nsleep(400);
> }
>
> --
> 2.4.3
>