Loading configure +19 −0 Original line number Diff line number Diff line Loading @@ -2818,6 +2818,22 @@ if compile_prog "" "" ; then dup3=yes fi # check for ppoll support ppoll=no cat > $TMPC << EOF #include <poll.h> int main(void) { struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; ppoll(&pfd, 1, 0, 0); return 0; } EOF if compile_prog "" "" ; then ppoll=yes fi # check for epoll support epoll=no cat > $TMPC << EOF Loading Loading @@ -3814,6 +3830,9 @@ fi if test "$dup3" = "yes" ; then echo "CONFIG_DUP3=y" >> $config_host_mak fi if test "$ppoll" = "yes" ; then echo "CONFIG_PPOLL=y" >> $config_host_mak fi if test "$epoll" = "yes" ; then echo "CONFIG_EPOLL=y" >> $config_host_mak fi Loading include/qemu/timer.h +12 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,18 @@ int64_t qemu_clock_deadline_ns(QEMUClock *clock); */ int qemu_timeout_ns_to_ms(int64_t ns); /** * qemu_poll_ns: * @fds: Array of file descriptors * @nfds: number of file descriptors * @timeout: timeout in nanoseconds * * Perform a poll like g_poll but with a timeout in nanoseconds. * See g_poll documentation for further details. * * Returns: number of fds ready */ int qemu_poll_ns(GPollFD *fds, guint nfds, int64_t timeout); void qemu_clock_enable(QEMUClock *clock, bool enabled); void qemu_clock_warp(QEMUClock *clock); Loading qemu-timer.c +24 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,10 @@ #include <mmsystem.h> #endif #ifdef CONFIG_PPOLL #include <poll.h> #endif /***********************************************************/ /* timers */ Loading Loading @@ -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 Loading
configure +19 −0 Original line number Diff line number Diff line Loading @@ -2818,6 +2818,22 @@ if compile_prog "" "" ; then dup3=yes fi # check for ppoll support ppoll=no cat > $TMPC << EOF #include <poll.h> int main(void) { struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; ppoll(&pfd, 1, 0, 0); return 0; } EOF if compile_prog "" "" ; then ppoll=yes fi # check for epoll support epoll=no cat > $TMPC << EOF Loading Loading @@ -3814,6 +3830,9 @@ fi if test "$dup3" = "yes" ; then echo "CONFIG_DUP3=y" >> $config_host_mak fi if test "$ppoll" = "yes" ; then echo "CONFIG_PPOLL=y" >> $config_host_mak fi if test "$epoll" = "yes" ; then echo "CONFIG_EPOLL=y" >> $config_host_mak fi Loading
include/qemu/timer.h +12 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,18 @@ int64_t qemu_clock_deadline_ns(QEMUClock *clock); */ int qemu_timeout_ns_to_ms(int64_t ns); /** * qemu_poll_ns: * @fds: Array of file descriptors * @nfds: number of file descriptors * @timeout: timeout in nanoseconds * * Perform a poll like g_poll but with a timeout in nanoseconds. * See g_poll documentation for further details. * * Returns: number of fds ready */ int qemu_poll_ns(GPollFD *fds, guint nfds, int64_t timeout); void qemu_clock_enable(QEMUClock *clock, bool enabled); void qemu_clock_warp(QEMUClock *clock); Loading
qemu-timer.c +24 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,10 @@ #include <mmsystem.h> #endif #ifdef CONFIG_PPOLL #include <poll.h> #endif /***********************************************************/ /* timers */ Loading Loading @@ -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