From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=42963 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pk1ew-0001bi-RT for qemu-devel@nongnu.org; Mon, 31 Jan 2011 16:51:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Pk1em-0004dt-8O for qemu-devel@nongnu.org; Mon, 31 Jan 2011 16:51:33 -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 1Pk1el-0004dS-W2 for qemu-devel@nongnu.org; Mon, 31 Jan 2011 16:51:32 -0500 Received: by mail-yx0-f173.google.com with SMTP id 31so2444455yxl.4 for ; Mon, 31 Jan 2011 13:51:31 -0800 (PST) Sender: Paolo Bonzini From: Paolo Bonzini Date: Mon, 31 Jan 2011 22:51:18 +0100 Message-Id: <1296510679-12268-3-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 2/3] Correct alarm deadline computation List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Jan Kiszka When the QEMU_CLOCK_HOST clock was added, computation of its deadline was added to qemu_next_deadline, which is correct but incomplete. I noticed this by reading the very convoluted rules whereby qemu_next_deadline_dyntick is computed, which miss QEMU_CLOCK_HOST when use_icount is true. This patch inlines qemu_next_deadline into qemu_next_deadline_dyntick, and then corrects the logic to skip only QEMU_CLOCK_VIRTUAL when use_icount is true. Signed-off-by: Paolo Bonzini Cc: Jan Kiszka --- qemu-timer.c | 15 +++++++++++---- 1 files changed, 11 insertions(+), 4 deletions(-) diff --git a/qemu-timer.c b/qemu-timer.c index 60283a8..c19d0a2 100644 --- a/qemu-timer.c +++ b/qemu-timer.c @@ -724,11 +724,18 @@ static uint64_t qemu_next_deadline_dyntick(void) int64_t delta; int64_t rtdelta; - if (use_icount) + if (!use_icount && active_timers[QEMU_CLOCK_VIRTUAL]) { + delta = active_timers[QEMU_CLOCK_VIRTUAL]->expire_time - + qemu_get_clock(vm_clock); + } else { delta = INT32_MAX; - else - delta = qemu_next_deadline(); - + } + if (active_timers[QEMU_CLOCK_HOST]) { + int64_t hdelta = active_timers[QEMU_CLOCK_HOST]->expire_time - + qemu_get_clock(host_clock); + if (hdelta < delta) + delta = hdelta; + } if (active_timers[QEMU_CLOCK_REALTIME]) { rtdelta = (active_timers[QEMU_CLOCK_REALTIME]->expire_time - qemu_get_clock_ns(rt_clock)); -- 1.7.3.4