From patchwork Thu Feb 3 13:49:01 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 81652 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id D9307B7114 for ; Fri, 4 Feb 2011 00:54:17 +1100 (EST) Received: from localhost ([127.0.0.1]:36481 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PkzdW-0005uh-TZ for incoming@patchwork.ozlabs.org; Thu, 03 Feb 2011 08:54:14 -0500 Received: from [140.186.70.92] (port=41213 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PkzYy-0003rp-S9 for qemu-devel@nongnu.org; Thu, 03 Feb 2011 08:50:03 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PkzYh-0004GA-Ti for qemu-devel@nongnu.org; Thu, 03 Feb 2011 08:49:17 -0500 Received: from mail-yw0-f45.google.com ([209.85.213.45]:61715) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PkzYh-0004G1-R3 for qemu-devel@nongnu.org; Thu, 03 Feb 2011 08:49:15 -0500 Received: by ywa8 with SMTP id 8so535934ywa.4 for ; Thu, 03 Feb 2011 05:49:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:sender:from:to:cc:subject:date:message-id :x-mailer:in-reply-to:references; bh=0Td+dwHWSyPFlm+SImm8u6B4WLIgvJWXPJkmZormMPA=; b=iQmD0KbDLjDLXuOWsnvE8ipolM0sd6TFY9CrmHQfBKJbyo6B34zavBMKV7jJb1jqeE 2KON6PO10e9i3Dy5fgM3Dn+TRu5nEAXI/bZp22ekrnflnjPGrxbM0yZFCX40GtgkzhGO v+RYOIxx5ygQHL1nf0r6o7EpmJzwDV/VfihIM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=sender:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; b=q1YUPRb1ScJ97MSJBpRX4CE/Pz0DV8GUKLZiSP9ISGuDdnXXAAWdldWN+pY2ZhvjbA OV5YGNQlrvk3ycJEvW1Q3ObY0nZTzRYu10nkREcd2rtck4O0quSXLJg5CFl/e4ERls5v gUhhV4Zk8xfX0RimNDmkCE+IcfzXMdUZkBVIw= Received: by 10.150.146.1 with SMTP id t1mr13130923ybd.236.1296740955256; Thu, 03 Feb 2011 05:49:15 -0800 (PST) Received: from localhost.localdomain (93-34-149-100.ip50.fastwebnet.it [93.34.149.100]) by mx.google.com with ESMTPS id u3sm315000yba.16.2011.02.03.05.49.13 (version=TLSv1/SSLv3 cipher=RC4-MD5); Thu, 03 Feb 2011 05:49:14 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Thu, 3 Feb 2011 14:49:01 +0100 Message-Id: <1296740941-24296-4-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.7.3.5 In-Reply-To: <1296740941-24296-1-git-send-email-pbonzini@redhat.com> References: <1296740941-24296-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 209.85.213.45 Cc: aurelien@aurel32.net Subject: [Qemu-devel] [PATCH v2 3/3] Unify alarm deadline computation X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@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)) {