diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2011-02-03 14:49:01 +0100 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2011-02-04 06:33:26 -0600 |
commit | 4c3d45eb694de3e0bda10841a06ba98be4d569b1 (patch) | |
tree | f1232bae6929bc46eb3aac9221c5a6e19a094b5c /qemu-timer.c | |
parent | 6ad0a1ed21ecd187dbe3239eb45c3598672af6a8 (diff) | |
download | hqemu-4c3d45eb694de3e0bda10841a06ba98be4d569b1.zip hqemu-4c3d45eb694de3e0bda10841a06ba98be4d569b1.tar.gz |
Unify alarm deadline computation
This patch shows how using the correct formula for
qemu_next_deadline_dyntick can simplify the code of
host_alarm_handler and eliminate useless duplication.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'qemu-timer.c')
-rw-r--r-- | qemu-timer.c | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/qemu-timer.c b/qemu-timer.c index 69e71d7..658f637 100644 --- a/qemu-timer.c +++ b/qemu-timer.c @@ -635,6 +635,8 @@ void qemu_run_all_timers(void) qemu_run_timers(host_clock); } +static int64_t qemu_next_alarm_deadline(void); + #ifdef _WIN32 static void CALLBACK host_alarm_handler(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, @@ -677,14 +679,7 @@ static void host_alarm_handler(int host_signum) } #endif if (alarm_has_dynticks(t) || - (!use_icount && - qemu_timer_expired(active_timers[QEMU_CLOCK_VIRTUAL], - qemu_get_clock(vm_clock))) || - qemu_timer_expired(active_timers[QEMU_CLOCK_REALTIME], - qemu_get_clock(rt_clock)) || - qemu_timer_expired(active_timers[QEMU_CLOCK_HOST], - qemu_get_clock(host_clock))) { - + qemu_next_alarm_deadline () <= 0) { t->expired = alarm_has_dynticks(t); t->pending = 1; qemu_notify_event(); @@ -715,11 +710,7 @@ int64_t qemu_next_deadline(void) #ifndef _WIN32 -#if defined(__linux__) - -#define RTC_FREQ 1024 - -static uint64_t qemu_next_deadline_dyntick(void) +static int64_t qemu_next_alarm_deadline(void) { int64_t delta; int64_t rtdelta; @@ -743,12 +734,13 @@ static uint64_t qemu_next_deadline_dyntick(void) delta = rtdelta; } - if (delta < MIN_TIMER_REARM_NS) - delta = MIN_TIMER_REARM_NS; - return delta; } +#if defined(__linux__) + +#define RTC_FREQ 1024 + static void enable_sigio_timer(int fd) { struct sigaction act; @@ -903,7 +895,9 @@ static void dynticks_rearm_timer(struct qemu_alarm_timer *t) !active_timers[QEMU_CLOCK_HOST]) return; - nearest_delta_ns = qemu_next_deadline_dyntick(); + nearest_delta_ns = qemu_next_alarm_deadline(); + if (nearest_delta_ns < MIN_TIMER_REARM_NS) + nearest_delta_ns = MIN_TIMER_REARM_NS; /* check whether a timer is already running */ if (timer_gettime(host_timer, &timeout)) { |