From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=49219 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pj8Y5-0006XU-7t for qemu-devel@nongnu.org; Sat, 29 Jan 2011 06:01:03 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Pj8Y4-000232-1m for qemu-devel@nongnu.org; Sat, 29 Jan 2011 06:00:57 -0500 Received: from mail-ww0-f53.google.com ([74.125.82.53]:54126) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Pj8Y3-00022f-Sp for qemu-devel@nongnu.org; Sat, 29 Jan 2011 06:00:56 -0500 Received: by wwi18 with SMTP id 18so3946378wwi.10 for ; Sat, 29 Jan 2011 03:00:54 -0800 (PST) Sender: Paolo Bonzini From: Paolo Bonzini Date: Sat, 29 Jan 2011 12:00:47 +0100 Message-Id: <1296298848-3080-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH 1/2] 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 while trying to make sense of the rules whereby qemu_next_deadline_dyntick is computed, which miss QEMU_CLOCK_HOST when use_icount is true. Looking at the history showed this to be just an oversight, as the next patch shows clearly. This patch inlines qemu_next_deadline into qemu_next_deadline_dyntick, and corrects the logic so that only QEMU_CLOCK_VIRTUAL is skipped for use_icount == 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 db1ec49..174fd0c 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() + 999) / 1000; - + } + 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(rt_clock))*1000; -- 1.7.3.4