aboutsummaryrefslogtreecommitdiff
path: root/tools/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools/tools')
-rw-r--r--tools/tools/netmap/bridge.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/tools/tools/netmap/bridge.c b/tools/tools/netmap/bridge.c
index 77d235bf6e08..0c8f56265ff4 100644
--- a/tools/tools/netmap/bridge.c
+++ b/tools/tools/netmap/bridge.c
@@ -17,6 +17,10 @@
#include <stdlib.h>
#include <unistd.h>
+#if defined(_WIN32)
+#define BUSYWAIT
+#endif
+
static int verbose = 0;
static int do_abort = 0;
@@ -321,21 +325,19 @@ main(int argc, char **argv)
pollfd[0].revents = pollfd[1].revents = 0;
n0 = rx_slots_avail(pa);
n1 = rx_slots_avail(pb);
-#if defined(_WIN32) || defined(BUSYWAIT)
+#ifdef BUSYWAIT
if (n0) {
- ioctl(pollfd[1].fd, NIOCTXSYNC, NULL);
pollfd[1].revents = POLLOUT;
} else {
ioctl(pollfd[0].fd, NIOCRXSYNC, NULL);
}
if (n1) {
- ioctl(pollfd[0].fd, NIOCTXSYNC, NULL);
pollfd[0].revents = POLLOUT;
} else {
ioctl(pollfd[1].fd, NIOCRXSYNC, NULL);
}
ret = 1;
-#else
+#else /* !defined(BUSYWAIT) */
if (n0)
pollfd[1].events |= POLLOUT;
else
@@ -347,7 +349,7 @@ main(int argc, char **argv)
/* poll() also cause kernel to txsync/rxsync the NICs */
ret = poll(pollfd, 2, 2500);
-#endif /* defined(_WIN32) || defined(BUSYWAIT) */
+#endif /* !defined(BUSYWAIT) */
if (ret <= 0 || verbose)
D("poll %s [0] ev %x %x rx %d@%d tx %d,"
" [1] ev %x %x rx %d@%d tx %d",
@@ -375,11 +377,19 @@ main(int argc, char **argv)
D("error on fd1, rx [%d,%d,%d)",
rx->head, rx->cur, rx->tail);
}
- if (pollfd[0].revents & POLLOUT)
+ if (pollfd[0].revents & POLLOUT) {
ports_move(pb, pa, burst, msg_b2a);
+#ifdef BUSYWAIT
+ ioctl(pollfd[0].fd, NIOCTXSYNC, NULL);
+#endif
+ }
- if (pollfd[1].revents & POLLOUT)
+ if (pollfd[1].revents & POLLOUT) {
ports_move(pa, pb, burst, msg_a2b);
+#ifdef BUSYWAIT
+ ioctl(pollfd[1].fd, NIOCTXSYNC, NULL);
+#endif
+ }
/*
* We don't need ioctl(NIOCTXSYNC) on the two file descriptors.