X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=tools%2Fvirtio%2Fringtest%2Fmain.c;h=f31353fac5415d8b9f5614e6f46f71a8f062f09b;hb=948a8ac2964f39161ebf832dea0aa1ced90101bb;hp=147abb452a6ccc098bf50338e0c353f4b8896f8a;hpb=9920779c9054ee442f38e7e9c8d606c77d11b8d8;p=cascardo%2Flinux.git diff --git a/tools/virtio/ringtest/main.c b/tools/virtio/ringtest/main.c index 147abb452a6c..f31353fac541 100644 --- a/tools/virtio/ringtest/main.c +++ b/tools/virtio/ringtest/main.c @@ -96,7 +96,13 @@ void set_affinity(const char *arg) assert(!ret); } -static void run_guest(void) +void poll_used(void) +{ + while (used_empty()) + busy_wait(); +} + +static void __attribute__((__flatten__)) run_guest(void) { int completed_before; int completed = 0; @@ -141,7 +147,7 @@ static void run_guest(void) assert(completed <= bufs); assert(started <= bufs); if (do_sleep) { - if (enable_call()) + if (used_empty() && enable_call()) wait_for_call(); } else { poll_used(); @@ -149,7 +155,13 @@ static void run_guest(void) } } -static void run_host(void) +void poll_avail(void) +{ + while (avail_empty()) + busy_wait(); +} + +static void __attribute__((__flatten__)) run_host(void) { int completed_before; int completed = 0; @@ -160,7 +172,7 @@ static void run_host(void) for (;;) { if (do_sleep) { - if (enable_kick()) + if (avail_empty() && enable_kick()) wait_for_kick(); } else { poll_avail();