[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC] [PATCHv9 07/31] aio / timers: Make qemu_run_timers an
From: |
Alex Bligh |
Subject: |
[Qemu-devel] [RFC] [PATCHv9 07/31] aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress |
Date: |
Sat, 10 Aug 2013 11:06:11 +0100 |
Make qemu_run_timers and qemu_run_all_timers return progress
so that aio_poll etc. can determine whether a timer has been
run.
Signed-off-by: Alex Bligh <address@hidden>
---
include/qemu/timer.h | 21 +++++++++++++++++++--
qemu-timer.c | 18 ++++++++++++------
2 files changed, 31 insertions(+), 8 deletions(-)
diff --git a/include/qemu/timer.h b/include/qemu/timer.h
index fcc3ca0..fcb6a42 100644
--- a/include/qemu/timer.h
+++ b/include/qemu/timer.h
@@ -92,8 +92,25 @@ bool timer_pending(QEMUTimer *ts);
bool timer_expired(QEMUTimer *timer_head, int64_t current_time);
uint64_t timer_expire_time_ns(QEMUTimer *ts);
-void qemu_run_timers(QEMUClock *clock);
-void qemu_run_all_timers(void);
+/**
+ * qemu_run_timers:
+ * @clock: clock on which to operate
+ *
+ * Run all the timers associated with a clock.
+ *
+ * Returns: true if any timer ran.
+ */
+bool qemu_run_timers(QEMUClock *clock);
+
+/**
+ * qemu_run_all_timers:
+ *
+ * Run all the timers associated with every clock.
+ *
+ * Returns: true if any timer ran.
+ */
+bool qemu_run_all_timers(void);
+
void configure_alarms(char const *opt);
void init_clocks(void);
int init_timer_alarm(void);
diff --git a/qemu-timer.c b/qemu-timer.c
index f224b62..4a10315 100644
--- a/qemu-timer.c
+++ b/qemu-timer.c
@@ -446,13 +446,14 @@ bool timer_expired(QEMUTimer *timer_head, int64_t
current_time)
return timer_expired_ns(timer_head, current_time * timer_head->scale);
}
-void qemu_run_timers(QEMUClock *clock)
+bool qemu_run_timers(QEMUClock *clock)
{
QEMUTimer *ts;
int64_t current_time;
+ bool progress = false;
if (!clock->enabled)
- return;
+ return progress;
current_time = qemu_get_clock_ns(clock);
for(;;) {
@@ -466,7 +467,9 @@ void qemu_run_timers(QEMUClock *clock)
/* run the callback (the timer list can be modified) */
ts->cb(ts->opaque);
+ progress = true;
}
+ return progress;
}
int64_t qemu_get_clock_ns(QEMUClock *clock)
@@ -521,20 +524,23 @@ uint64_t timer_expire_time_ns(QEMUTimer *ts)
return timer_pending(ts) ? ts->expire_time : -1;
}
-void qemu_run_all_timers(void)
+bool qemu_run_all_timers(void)
{
+ bool progress = false;
alarm_timer->pending = false;
/* vm time timers */
- qemu_run_timers(vm_clock);
- qemu_run_timers(rt_clock);
- qemu_run_timers(host_clock);
+ progress |= qemu_run_timers(vm_clock);
+ progress |= qemu_run_timers(rt_clock);
+ progress |= qemu_run_timers(host_clock);
/* rearm timer, if not periodic */
if (alarm_timer->expired) {
alarm_timer->expired = false;
qemu_rearm_alarm_timer(alarm_timer);
}
+
+ return progress;
}
#ifdef _WIN32
--
1.7.9.5
- [Qemu-devel] [RFC] [PATCHv9 00/31] aio / timers: Add AioContext timers and use ppoll, Alex Bligh, 2013/08/10
- [Qemu-devel] [RFC] [PATCHv9 02/31] aio / timers: Rename qemu_new_clock and expose clock types, Alex Bligh, 2013/08/10
- [Qemu-devel] [RFC] [PATCHv9 04/31] aio / timers: Consistent treatment of disabled clocks for deadlines, Alex Bligh, 2013/08/10
- [Qemu-devel] [RFC] [PATCHv9 06/31] aio / timers: Add prctl(PR_SET_TIMERSLACK, 1, ...) to reduce timer slack, Alex Bligh, 2013/08/10
- [Qemu-devel] [RFC] [PATCHv9 05/31] aio / timers: add ppoll support with qemu_poll_ns, Alex Bligh, 2013/08/10
- [Qemu-devel] [RFC] [PATCHv9 03/31] aio / timers: add qemu-timer.c utility functions, Alex Bligh, 2013/08/10
- [Qemu-devel] [RFC] [PATCHv9 07/31] aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress,
Alex Bligh <=
- [Qemu-devel] [RFC] [PATCHv9 01/31] aio / timers: Rename qemu_timer_* functions, Alex Bligh, 2013/08/10
- [Qemu-devel] [RFC] [PATCHv9 13/31] aio / timers: aio_ctx_prepare sets timeout from AioContext timers, Alex Bligh, 2013/08/10
- [Qemu-devel] [RFC] [PATCHv9 11/31] aio / timers: Add QEMUTimerListGroup to AioContext, Alex Bligh, 2013/08/10
- [Qemu-devel] [RFC] [PATCHv9 10/31] aio / timers: Add QEMUTimerListGroup and helper functions, Alex Bligh, 2013/08/10
- [Qemu-devel] [RFC] [PATCHv9 14/31] aio / timers: Add aio_timer_init & aio_timer_new wrappers, Alex Bligh, 2013/08/10
- [Qemu-devel] [RFC] [PATCHv9 12/31] aio / timers: Add a notify callback to QEMUTimerList, Alex Bligh, 2013/08/10
- [Qemu-devel] [RFC] [PATCHv9 15/31] aio / timers: Convert aio_poll to use AioContext timers' deadline, Alex Bligh, 2013/08/10
- [Qemu-devel] [RFC] [PATCHv9 16/31] aio / timers: Convert mainloop to use timeout, Alex Bligh, 2013/08/10
- [Qemu-devel] [RFC] [PATCHv9 17/31] aio / timers: On timer modification, qemu_notify or aio_notify, Alex Bligh, 2013/08/10
- [Qemu-devel] [RFC] [PATCHv9 09/31] aio / timers: Untangle include files, Alex Bligh, 2013/08/10