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 <[email protected]>
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
>