All new accounts created on Gitlab now require administrator approval. If you invite any collaborators, please let Flux staff know so they can approve the accounts.

Commit f9a976b7 authored by Alex Bligh's avatar Alex Bligh Committed by Stefan Hajnoczi

aio / timers: Make qemu_run_timers and qemu_run_all_timers return progress

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: default avatarAlex Bligh <alex@alex.org.uk>
Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
parent cd758dd0
......@@ -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);
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment