From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=42991 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pk1ex-0001cT-5Q for qemu-devel@nongnu.org; Mon, 31 Jan 2011 16:51:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Pk1en-0004eD-75 for qemu-devel@nongnu.org; Mon, 31 Jan 2011 16:51:35 -0500 Received: from mail-yx0-f173.google.com ([209.85.213.173]:48996) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Pk1en-0004dS-4R for qemu-devel@nongnu.org; Mon, 31 Jan 2011 16:51:33 -0500 Received: by mail-yx0-f173.google.com with SMTP id 31so2444455yxl.4 for ; Mon, 31 Jan 2011 13:51:32 -0800 (PST) Sender: Paolo Bonzini From: Paolo Bonzini Date: Mon, 31 Jan 2011 22:51:19 +0100 Message-Id: <1296510679-12268-4-git-send-email-pbonzini@redhat.com> In-Reply-To: <1296510679-12268-1-git-send-email-pbonzini@redhat.com> References: <1296510679-12268-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH 3/3] Unify alarm deadline computation List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org 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 --- qemu-timer.c | 28 +++++++++++----------------- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/qemu-timer.c b/qemu-timer.c index c19d0a2..d3c426c 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)) { -- 1.7.3.4