mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 15:23:53 -06:00
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:
parent
043a7e1f8f
commit
4e0c6529fc
3 changed files with 55 additions and 0 deletions
24
qemu-timer.c
24
qemu-timer.c
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue