[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 13/42] aio / timers: add ppoll support with qemu_poll
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PULL 13/42] aio / timers: add ppoll support with qemu_poll_ns |
Date: |
Thu, 22 Aug 2013 22:11:09 +0200 |
From: Alex Bligh <address@hidden>
Add qemu_poll_ns which works like g_poll but takes a nanosecond
timeout.
Signed-off-by: Alex Bligh <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
configure | 19 +++++++++++++++++++
include/qemu/timer.h | 12 ++++++++++++
qemu-timer.c | 24 ++++++++++++++++++++++++
3 files changed, 55 insertions(+)
diff --git a/configure b/configure
index 18fa608..5659412 100755
--- a/configure
+++ b/configure
@@ -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
@@ -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
diff --git a/include/qemu/timer.h b/include/qemu/timer.h
index e0a51a1..e4a6479 100644
--- a/include/qemu/timer.h
+++ b/include/qemu/timer.h
@@ -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);
diff --git a/qemu-timer.c b/qemu-timer.c
index be29adf..120d58f 100644
--- a/qemu-timer.c
+++ b/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)
{
--
1.8.3.1
- [Qemu-devel] [PULL 02/42] block: Introduce bs->zero_beyond_eof, (continued)
- [Qemu-devel] [PULL 02/42] block: Introduce bs->zero_beyond_eof, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 03/42] block: Produce zeros when protocols reading beyond end of file, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 04/42] block: better error message for read only format name, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 06/42] vmdk: fix L1 and L2 table size in vmdk3 open, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 05/42] vmdk: Move l1_size check into vmdk_add_extent(), Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 08/42] vmdk: support vmfs files, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 07/42] vmdk: support vmfsSparse files, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 10/42] aio / timers: Rename qemu_new_clock and expose clock types, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 09/42] aio / timers: Rename qemu_timer_* functions, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 11/42] aio / timers: add qemu-timer.c utility functions, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 13/42] aio / timers: add ppoll support with qemu_poll_ns,
Stefan Hajnoczi <=
- [Qemu-devel] [PULL 12/42] aio / timers: Consistent treatment of disabled clocks for deadlines, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 14/42] aio / timers: Add prctl(PR_SET_TIMERSLACK, 1, ...) to reduce timer slack, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 15/42] aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 16/42] aio / timers: Split QEMUClock into QEMUClock and QEMUTimerList, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 17/42] aio / timers: Untangle include files, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 18/42] aio / timers: Add QEMUTimerListGroup and helper functions, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 19/42] aio / timers: Add QEMUTimerListGroup to AioContext, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 20/42] aio / timers: Add a notify callback to QEMUTimerList, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 21/42] aio / timers: aio_ctx_prepare sets timeout from AioContext timers, Stefan Hajnoczi, 2013/08/22
- [Qemu-devel] [PULL 22/42] aio / timers: Add aio_timer_init & aio_timer_new wrappers, Stefan Hajnoczi, 2013/08/22