aio / timers: add ppoll support with qemu_poll_ns

Add qemu_poll_ns which works like g_poll but takes a nanosecond
timeout.

Signed-off-by: Alex Bligh <alex@alex.org.uk>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Alex Bligh 2013-08-21 16:02:43 +01:00 committed by Stefan Hajnoczi
parent 043a7e1f8f
commit 4e0c6529fc
3 changed files with 55 additions and 0 deletions

View file

@ -37,6 +37,10 @@
#include <mmsystem.h>
#endif
#ifdef CONFIG_PPOLL
#include <poll.h>
#endif
/***********************************************************/
/* timers */
@ -323,6 +327,26 @@ int qemu_timeout_ns_to_ms(int64_t ns)
}
/* qemu implementation of g_poll which uses a nanosecond timeout but is
* otherwise identical to g_poll
*/
int qemu_poll_ns(GPollFD *fds, guint nfds, int64_t timeout)
{
#ifdef CONFIG_PPOLL
if (timeout < 0) {
return ppoll((struct pollfd *)fds, nfds, NULL, NULL);
} else {
struct timespec ts;
ts.tv_sec = timeout / 1000000000LL;
ts.tv_nsec = timeout % 1000000000LL;
return ppoll((struct pollfd *)fds, nfds, &ts, NULL);
}
#else
return g_poll(fds, nfds, qemu_timeout_ns_to_ms(timeout));
#endif
}
QEMUTimer *qemu_new_timer(QEMUClock *clock, int scale,
QEMUTimerCB *cb, void *opaque)
{