diff mbox

[PATCHv2,RFC,4/7] aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress

Message ID 1374343603-29183-5-git-send-email-alex@alex.org.uk
State New
Headers show

Commit Message

Alex Bligh July 20, 2013, 6:06 p.m. UTC
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 <alex@alex.org.uk>
---
 include/qemu/timer.h |    4 ++--
 qemu-timer.c         |   17 +++++++++++------
 2 files changed, 13 insertions(+), 8 deletions(-)
diff mbox

Patch

diff --git a/include/qemu/timer.h b/include/qemu/timer.h
index 2f1b609..e0922e6 100644
--- a/include/qemu/timer.h
+++ b/include/qemu/timer.h
@@ -63,8 +63,8 @@  bool qemu_timer_pending(QEMUTimer *ts);
 bool qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time);
 uint64_t qemu_timer_expire_time_ns(QEMUTimer *ts);
 
-void qemu_run_timers(QEMUClock *clock);
-void qemu_run_all_timers(void);
+bool qemu_run_timers(QEMUClock *clock);
+bool qemu_run_all_timers(void);
 void init_clocks(void);
 
 int64_t cpu_get_ticks(void);
diff --git a/qemu-timer.c b/qemu-timer.c
index 5c576b4..4cba055 100644
--- a/qemu-timer.c
+++ b/qemu-timer.c
@@ -299,13 +299,14 @@  bool qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
     return qemu_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(;;) {
@@ -319,7 +320,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)
@@ -371,10 +374,12 @@  uint64_t qemu_timer_expire_time_ns(QEMUTimer *ts)
     return qemu_timer_pending(ts) ? ts->expire_time : -1;
 }
 
-void qemu_run_all_timers(void)
+bool qemu_run_all_timers(void)
 {
     /* vm time timers */
-    qemu_run_timers(vm_clock);
-    qemu_run_timers(rt_clock);
-    qemu_run_timers(host_clock);
+    bool progress = false;
+    progress |= qemu_run_timers(vm_clock);
+    progress |= qemu_run_timers(rt_clock);
+    progress |= qemu_run_timers(host_clock);
+    return progress;
 }